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

a294447011294447011 2009-03-26 02:26:21
以下的问题有谁可以帮忙解释清楚??
////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你好!”呢?
...全文
70 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
amoachy 2009-04-13
  • 打赏
  • 举报
回复
你好!
我想用vb 调用 vc编写的dll
详细过程是?
我刚学dll,很多搞不清楚

请大家指教啊!

qq:410781398
cnzdgs 2009-03-28
  • 打赏
  • 举报
回复
VB的String类型中记录了字符串的长度,不是以\0作为结尾。

5,139

社区成员

发帖
与我相关
我的任务
社区描述
其他开发语言 Office开发/ VBA
社区管理员
  • Office开发/ VBA社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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