关于Delphi调用VC编写的DLL问题?

leiyang 2005-09-14 03:32:31
我初学VC,用VC的 MFC APPWizard(DLL)创建了一个DLL,里有两个导出函数,然后在Delphi里调用,ShowHello没有参数,可以;ShowHello2有一个Pchar参数,为什么执行后总是弹出一个错误窗口。

源码如下:

VC:
// my.h : main header file for the my DLL

class CmyApp : public CWinApp
{
......
};

extern "C" __declspec(dllexport) BOOL ShowHello(void);
extern "C" __declspec(dllexport) BOOL ShowHello2(const char * aName);


//my.cpp:--------------------------------------
.......

extern "C" __declspec(dllexport) BOOL ShowHello(void)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

AfxMessageBox("Hello, Vc 6.0.");
return true;
}

extern "C" __declspec(dllexport) BOOL ShowHello2(const char * aName)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

AfxMessageBox("Hello, Vc 6.0.");
return true;
}


Delphi **************************************************
声明:
function ShowHello2(aName:PChar):boolean;stdcall;external 'my.dll' name 'ShowHello2';
function ShowHello():boolean;stdcall;external 'my.dll'name 'ShowHello';

调用:
var
aName:PChar;
begin
aName := StrAlloc(64);
StrPCopy(aName,'Mike');
ShowHello2(aName); //可以弹出对话框"Hello, Vc 6.0.",接着就出错了 Access violation at addres 00E8723B.Write of address 2C01B51C
StrDispose(aName);
end;


为什么 VC 中带了参数就会出错,换成其他参数也是。请各位帮忙看看哪里出了问题了?多谢了。
...全文
143 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
leiyang 2005-09-14
  • 打赏
  • 举报
回复
已经搞定,多谢各位
winehero 2005-09-14
  • 打赏
  • 举报
回复
Delphi用的是__stdcall,VC默认方式__declspec, 将申明方法的调用该为__stdcall以便与
Delphi一致
leiyang 2005-09-14
  • 打赏
  • 举报
回复
happyparrot: Delphi里好像认识 const,况且就算去掉也不行。

somexing(张星星):请问 __stdcall 应该放在哪里?

我初学 Dll,请多指教,多谢。
oyljerry 2005-09-14
  • 打赏
  • 举报
回复
用__stdcall标准调用约定,然后注意不同育秧参数类型的对应
gnixemos 2005-09-14
  • 打赏
  • 举报
回复
应该是__stdcall
快乐鹦鹉 2005-09-14
  • 打赏
  • 举报
回复
别用const char*,DELPHI认识const么?把const去掉,或者改成BSTR类型的

15,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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