求助,把一段C代码转换成等价的VB代码

ye08si 2010-05-16 12:52:45
#include "stdio.h"
#include "windows.h"
void *r;
int _tmain(int argc, _TCHAR* argv[])
{
HMODULE hm = ::LoadLibrary("VerifyCode.dll");
DWORD faddr1, faddr2, faddr3;
char *p = "c:\\1.jpg";
r = (void *)malloc(16);
memset(r, 0, 16);
faddr1 = (DWORD)::GetProcAddress(hm, "InitVerifyCodePick");
faddr2 = (DWORD)::GetProcAddress(hm, "GetVerifyCode");
faddr3 = (DWORD)::GetProcAddress(hm, "UnInitVerifyCodePick");
_asm
{
call faddr1
push r
push p
call faddr2
call faddr3
}
MessageBox(NULL, (char *)r, "o", MB_OK);
CloseHandle(hm);
return 0;
}
///////////////////////////////////////////
_asm
{
call faddr1
push r
push p
call faddr2
call faddr3
}
实际上等价于
InitVerifyCodePick();
GetVerifyCode(p, r); //两个参数都是字符指针
UnInitVerifyCodePick();
...全文
67 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
兔子-顾问 2010-05-16
  • 打赏
  • 举报
回复
    Public Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As IntPtr
Public Declare Function GetProcAddress Lib "kernel32" Alias "GetProcAddress" (ByVal hModule As Integer, ByVal lpProcName As String) As IntPtr
Public Delegate Sub VoidDelegate()
Public Delegate Sub GetVerifyCodeDelegate(ByVal r As Byte(), ByVal p As Char())
Private Sub TestExternLibrary()
Dim hDll As IntPtr = LoadLibrary("VerifyCode.dll")
Dim hProc As IntPtr = GetProcAddress(hDll, "InitVerifyCodePick")
Dim InitVerifyCodePick As VoidDelegate = Marshal.GetDelegateForFunctionPointer(hProc, GetType(VoidDelegate))
hProc = GetProcAddress(hDll, "UnInitVerifyCodePick")
Dim UnInitVerifyCodePick As VoidDelegate = Marshal.GetDelegateForFunctionPointer(hProc, GetType(VoidDelegate))
hProc = GetProcAddress(hDll, "GetVerifyCode")
Dim GetVerifyCode As GetVerifyCodeDelegate = Marshal.GetDelegateForFunctionPointer(hProc, GetType(GetVerifyCodeDelegate))
InitVerifyCodePick()
Dim r(0 To 15) As Byte
Dim p As Char() = "c:\\1.jpg".ToCharArray()
GetVerifyCode(r, p)
UnInitVerifyCodePick()
End Sub
ye08si 2010-05-16
  • 打赏
  • 举报
回复
谢谢你们的回答!

我本人对VB不熟
帮看看这段代码,这是别人帮转的,是有问题的。

我主要是想知道:
用VB调用GetVerifyCode这个函数时,怎么传参才是正确的
必须传进两个字符串指针才行,不知道用VB怎么才能做到


Private Declare Function InitVerifyCodePick Lib "VerifyCode.dll" ()
Private Declare Function UnInitVerifyCodePick Lib "VerifyCode.dll" ()
Private Declare Function GetVerifyCode Lib "VerifyCode.dll" (a As String, b() As Byte) As String



Private Sub Command1_Click()
InitVerifyCodePick

Dim c() As Byte

Dim d() As Byte

c = StrConv("c:\1.jpg", vbFromUnicode)

Call GetVerifyCode("c:\1.jpg", d)

MsgBox StrConv(d(), vbUnicode)

UnInitVerifyCodePick
End Sub


Forrest23 2010-05-16
  • 打赏
  • 举报
回复
C语言 不懂 帮顶
兔子-顾问 2010-05-16
  • 打赏
  • 举报
回复
搜索一下vb.net p/invoke。就是标准写法而已。
你要动态的加载函数指针,需要用到GetDelegateFromPtr方法,其他的和标准的api调用类似。

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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