我初学VC,用VC的 MFC APPWizard(DLL)创建了一个DLL,里有两个导出函数,然后在Delphi里调用,ShowHello没有参数,可以;ShowHello2有一个Pchar参数,为什么执行后总是弹出一个错误窗口。源码如下:VC:
// my.h : main header file for the my DLLclass 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 中带了参数就会出错,换成其他参数也是。请各位帮忙看看哪里出了问题了?多谢了。

解决方案 »

  1.   

    别用const char*,DELPHI认识const么?把const去掉,或者改成BSTR类型的
      

  2.   

    用__stdcall标准调用约定,然后注意不同育秧参数类型的对应
      

  3.   

    happyparrot: Delphi里好像认识 const,况且就算去掉也不行。somexing(张星星):请问 __stdcall 应该放在哪里?我初学 Dll,请多指教,多谢。
      

  4.   

    Delphi用的是__stdcall,VC默认方式__declspec, 将申明方法的调用该为__stdcall以便与
    Delphi一致