C#调用DLL 问题(第二贴),求教各位

AsTer1a 2016-03-30 02:44:42
接口说明:
eg1.
BOOL PostData(const vector<vector<CString>> *parArray,CString &strRst);
需要C++或以上才可以调用
参数说明:
parArray 是二维数组, 每个一维包含二个值:参数名和参数值
strRst 返回的结果
return 返回执行成功或失败(有需要打印的, 无论打印成功或失败, 对return 无影响)
编码说明:
1.在调用PostData前调用
void setToolEncoding(const int type);
可以设置编码 type: 0 asic码(多字节编码), 1 unicode码
2.如果没有调用setToolEncoding, 则会查找 MESScan.mdb 里的表 config, select val from config where par='TOOL_ENCODING' 的值
设置编码.
3. 如果上面1和2不存在, 则默认为 0 asic码(多字节编码). 旧的dll和工具使用的是asic码.

eg2.
BOOL PostDataU(const wchar_t * sPostData,wchar_t*sRst,const int iMaxRstLen);
C程序可调用
参数说明:
sPostData: post的url 参数: SITE=2000&SFC=28888...
sRst: 返回的结果
iMaxRstLen: sRst可接收的最大长度, 例如: char sRst[100]; 或 char *sRst; sRst=new char[100]; iMaxRstLen的值是100. 100个字符包含字符串结束符 '\0'
return 返回执行成功或失败(有需要打印的, 无论打印成功或失败, 对return 无影响)
编码说明:
此方法固定用 宽字节 unicode码.

eg3.
BOOL PostDataA(const char * sPostData,char*sRst,const int iMaxRstLen);
和eg2 一样, 编码用的是asic码(多字节编码)
...全文
195 6 打赏 收藏 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
AsTer1a 2016-03-31
  • 打赏
  • 举报
回复
HELP!!!!
Poopaye 2016-03-30
  • 打赏
  • 举报
回复
引用 3 楼 xupengtian1 的回复:
[quote=引用 2 楼 shingoscar 的回复:] 用c++再写个dll调用就是了
不懂C++ [/quote]
nry19871012 2016-03-30
  • 打赏
  • 举报
回复
让DLL的提供者写一个标准C的库。
AsTer1a 2016-03-30
  • 打赏
  • 举报
回复
引用 2 楼 shingoscar 的回复:
用c++再写个dll调用就是了
不懂C++
Poopaye 2016-03-30
  • 打赏
  • 举报
回复
用c++再写个dll调用就是了
AsTer1a 2016-03-30
  • 打赏
  • 举报
回复

   class MesDLL
    {
        [DllImport("MESScan.dll",EntryPoint="PostDataA")]
        public static extern bool PostDataA(string url, ref string rst, int length);
    }

    string str="" ;
   string val = "SFC=" + SFC + "&SITE=" + SITE + "&PLATFORM=" + PLATFORM + "&RESOURCE=" + RESOURCE + "&OPERATION=" + OPERATION + "&PULSE_FREQ=" + PULSE_FREQ + 
               "&PULSE_WIDTH=" + PULSE_WIDTH + "&INT_L=" + INT_L +  "&INT_M=" + INT_M + "&INT_H=" + INT_H + "&PULSE_TD_C=" + PULSE_TD_C + "&PULSE_TD_I=" + PULSE_TD_I +
               "&NCCODE=" + NCCODE + "&TESTRESULT=" + TESTRESULT;
           bool bl = MesDLL.PostDataA(val, ref str, 10);
          MessageBox.Show(str);
上面代码是按eg3调用,执行结果是bl返回false.返回值str乱码。调整iMaxRstLen为空。

111,128

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧