Vb调用Dll

BlueBlood 2015-04-02 02:11:19
VC++2003编译的一个DLL想用VB调用,自己琢磨了好久,网上也找了很多,现在的问题是我执行之后没有反应
可能是调用出错了,请大神帮我看看~
----------------------------------------------------------vc中----------------------------------------------------------
原函数:
bool __stdcall CWHEncrypt::XorEncrypt(LPCTSTR pszSourceData, LPTSTR pszEncrypData, WORD wMaxCount)
{加密过程,pszSourceData为原字符串,pszEncrypData为加密后的字符串,wMaxCount为pszEncrypData的长度}
函数声明:
static bool __stdcall XorEncrypt(LPCTSTR pszSourceData, LPTSTR pszEncrypData, WORD wMaxCount);
----------------------------------------------------------vc中----------------------------------------------------------

----------------------------------------------------------vb调用----------------------------------------------------------
定义:
Public Declare Function XorEncrypt Lib "ServiceCore.dll" (ByVal SourceData As String, ByVal EncrypData As String, Count As Integer) As Boolean

按钮触发事件
Dim a As String, b As String, c As Boolean

a = Text5.Text
c = XorEncrypt(a, b, 512)
Me.Text6.Text = b
----------------------------------------------------------vb调用----------------------------------------------------------

如果是在VB中直接启动,会导致VB无响应,然后只能结束掉
生产EXE后点击按钮无反应
...全文
147 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
BlueBlood 2015-04-02
  • 打赏
  • 举报
回复
引用 6 楼 Tiger_Zhao 的回复:
吐槽:Xor 的密文,VB 接收 b 参数进行 ANSI->Unicode 转换会出乱码,解密不回来的。 你确定这是你想要的结果吗?
可以解密出来的 多谢
BlueBlood 2015-04-02
  • 打赏
  • 举报
回复
给跪了,我捣腾了一上午的东西终于好了 在此跪谢大神指点。。。。。
Tiger_Zhao 2015-04-02
  • 打赏
  • 举报
回复
吐槽:Xor 的密文,VB 接收 b 参数进行 ANSI->Unicode 转换会出乱码,解密不回来的。
你确定这是你想要的结果吗?
Tiger_Zhao 2015-04-02
  • 打赏
  • 举报
回复
你的 b 变量没有分配字符串空间啊!XorEncrypt() 收到一个 null 指针怎么输出结果?
    a = Text5.Text
If LenB(a) <> 0 Then
b = Space(Len(a))
c = XorEncrypt(a, b, 512)
End If
Me.Text6.Text = b
BlueBlood 2015-04-02
  • 打赏
  • 举报
回复
VB 函数返回类型修改为As Byte以及DLL改为ANSI之后程序不会死掉了 不过加密的结果为空,是不是因为参数传递存在问题?
Tiger_Zhao 2015-04-02
  • 打赏
  • 举报
回复
还有:
C++ 的 bool 是 1 字节,所以 VB 函数返回类型应该是 As Byte
还有字符串参数 VB 想声明为 Strng 类型,C 的dll必须是ANSI而不是UNICODE的——VB6设计的时候C++还只有LPSTR没有LPWSTR。
BlueBlood 2015-04-02
  • 打赏
  • 举报
回复
API声明,第3个参数肯定就是 ByVal Count As Integer 改过之后还是一样的效果,主要问题应该不是这边 VC是使用 Unicode 字符集的 typedef TCHAR FAR * LPTSTR; typedef const TCHAR FAR * LPCTSTR; 请教如果是用Long类型的那个字符串如何转化?
舉杯邀明月 2015-04-02
  • 打赏
  • 举报
回复
API声明,第3个参数肯定就是 ByVal Count As Integer 先把这儿改正再试下吧。 另外,前两个参数,原型中一个是LPCTSTR,一个是LPTSTR。 不知道你的这两个有什么区别。说不定VB6中应该声明为Long类型,调用时传指针给它。

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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