首页
社区
课程
招聘
[求助]这样的问题谁可以解释为什么?(vc连接dll给vb调用)
发表于: 2009-3-26 02:30 3549

[求助]这样的问题谁可以解释为什么?(vc连接dll给vb调用)

2009-3-26 02:30
3549

以下的问题有谁可以帮忙解释清楚??
////vc程序.cpp代码 vcdll.dll
char *cstr1="vb.exe??vc.dll你好!";
WCHAR *wstr1=L"vb.exe??vc.dll你好!";
//导出:void get_fun5_rva(int i)
extern  "C" void  _declspec(dllexport)get_fun5_rva(
int i//vb一个string类型地址
)
{
MessageBoxW(NULL,(WCHAR*)i,L"dll提示vb字符串信息",MB_OK);//第一次消息对话筐
WriteProcessMemory((void*)-1,(void *)i,(void*)cstr1,strlen(cstr1)+1,0);
MessageBoxA(NULL,(char*)i,"dll提示1",MB_OK);//第二次消息对话筐
//strcpy((char*)i,"dll提示vb字符串信息");
//MessageBoxA(NULL,"get_fun5_rva向vb写字符串调用vb函数完毕!","dll提示2",MB_OK);//第三次消息对话筐
}

////////////////////////////////////////////////////////////////////////////////////////

'vb程序普通模块代码
Public Declare Sub get_fun5_rva Lib "vcdll.dll" (ByVal i As Long)
Public cstr2 As String * 1024

'vb程序窗口代码
Private Sub Form_Load()
      cstr2 = "你好!"
      Dim i As Long
      i = StrPtr(cstr2)
      get_fun5_rva i
      MsgBox cstr2, 0, "vb提示字符串信息" '第四次消息对话筐
End Sub
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

程序运行结果是:
      第一次消息对话筐的内容是:“你好!(后面加了不可显示的字符)”
      第二次消息对话筐的内容是:“vb.exe??vc.dll你好!”
      第四次消息对话筐的内容是:“你好!(后面加了不可显示的字符)”此次有疑问?
按我想的,用WriteProcessMemory给vb的cstr2 As String写字符串:“vb.exe??vc.dll你好!”是成功的,可是为什么第四次消息对话筐的内容还是:“你好!(后面加了不可显示的字符)”
不是我想的:“vb.exe??vc.dll你好!”呢?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 267
活跃值: (438)
能力值: ( LV9,RANK:190 )
在线值:
发帖
回帖
粉丝
2
有人可以给出StrPtr函数的汇编代码吗?
2009-3-26 02:35
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
3
MSVBVM60.DLL中没有类似StrPtr这样的函数,你需要自己调试确定它被映射成哪一个API
2009-3-26 22:39
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
4
VB是有一个StrPtr函数的,主要功能作用是取得VB字符串的实际地址指针。
2009-3-27 09:01
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
5
看了一下,StrPtr函数被VB映射成__vbaStrVarVal。__vbaStrVarVal函数是取得VB字符串的实际地址。
2009-3-27 09:29
0
游客
登录 | 注册 方可回帖
返回
//