关于Delphi调用VC编写的DLL问题?
我初学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 中带了参数就会出错,换成其他参数也是。请各位帮忙看看哪里出了问题了?多谢了。
源码如下:
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 中带了参数就会出错,换成其他参数也是。请各位帮忙看看哪里出了问题了?多谢了。
...全文
相关推荐
MAPGIS二次开发一些常见问题汇总.pdf
。。。
Mis软件工程师面试题
Mis软件工程师面试题Mis软件工程师面试题Mis软件工程师面试题Mis软件工程师面试题
Qt.VC调用delphi编写的dll lib,详细方法
delphi可以很方便的封装第三方库,导出dll,此方法可以很方便的生成供Qt或VC调用的Lib文件,免去动态加载的麻烦,喜欢的朋友可以试下。我就是这么用的。
VC的DLL类导出后,用Delphi调用方法及源码
在VC中的DLL类导出以后完全是可以被delphi调用的.源码中有详细介绍和说明文档.
Delphi 调用VC生成的DLL
详细描述Delphi 调用VC生成的DLL的方法,并有函数说明


进程/线程/DLL
