高手进来讨论一个关于一般的DLL调用的问题!欢迎UP,UP有分!

先举个例子:

有一个C++写的EncForSave.Dll,函数的原来意图是将输入的字符串加密后输入出.如果成功函数返回1,失败返回0.
本来该函数在VB.NET中应该定义为
Declare Function EncForSave Lib "EncForSave.Dll" Alias "EncForSave" (ByVal strIn As String, ByVal strOut As String) As Integer

但是我发现strOut根本收不到函数返回的值.但是如果我这样子定义:
Declare Function EncForSave Lib "EncForSave.Dll" Alias "EncForSave" (ByVal byteIn() As Byte, ByVal byteOut() As Byte) As Integer

这样就能收到了.
而且根据以往的情况来看,定义任何数据类型都收不到返回值,除了定义为Byte数组!

请高手回答:
1.什么原因?
2.如何解决?
3.解决方法适用于其他要返回的数据类型吗?
---------------------------------------------------------------

c++ 的 char * 就是指向 字符串数组的首地址
但是由于 C++;里面使用的是 LPSTR ,而 老VB, .Net (C++除外) 使用的是 BSTR ,结构上不同, 所以不能互传,而 Byte 和 Char 的结构一样 所以用 Char * 对应 Byte() 能够互传

BSTR 结构传给LPSTR 后 还要用 lstrcpy 来转换

当然你 可以直接在 C++ 里面定义 EncForSave(BSTR pIn, BSTR pOut)
不过C++里面默认是 LPSTR,所以你要在 C++里面进行转换

Published At
Categories with Web编程
Tagged with
comments powered by Disqus