关于BCB调用 VB写的DLL
BCB 6,
用BCB来调用VB写的DLL,这里称为"VBDLL.DLL"
typedef bool _stdcall _export(*FUNC)(char*,char*,char*);
HMODULE hModule = LoadLibrary("VBDLL.dll");
FUNC Func= NULL;
Func= (FUNC ) GetProcAddress(hModule, "Func");
if(Func==NULL) {
ShowMessage("无此函数");
return;
}
bool z=LoadSrcData("First","Second","Third");
FreeLibrary(hModule);
vb中函数定义如下:
Func(A as string, B as string, C as string)as boolean
BCB中 编译过程中,GetProcAddress总是无法得到函数地址。请问如何解决?
[解决办法]
首先,你可用BCB的自带工具看一下VBDLL.dll的导出函数,在命令行用
tdump VBDLL.dll
看它的Exports from VBDLL.dll中有无导出函数Func,如果没有,说明VB的dll有问题
其次:
HMODULE hModule = LoadLibrary("VBDLL.dll");
看一下hModule的返回值是否为NULL,看VBDLL有无正确加载
[解决办法]
typedef bool _stdcall _export(*FUNC)(char*,char*,char*);//改成:typedef bool _stdcall(*FUNC)(char*,char*,char*);//ortypedef bool (*FUNC)(char*,char*,char*);
[解决办法]
如果vb的DLL是可以改的,试试将它改成:
Func(ByVal A as string,ByVal B as string, ByVal C as string)as boolean
(现在手上只用vs2005/2008,它好像不再支持写DLL,很久没用VB了)
然后用typedef bool _stdcall(*FUNC)(char*,char*,char*);测试
[解决办法]
http://topic.csdn.net/u/20090313/13/c0fafe9e-842b-4b44-a14e-4075393dd6a5.html
[解决办法]
vb不能生成标准的DLL,而是ActiveX Com库,必须按照Com的方法调用
lz按照下面的方法去试试
http://topic.csdn.net/t/20050308/13/3833762.html
[解决办法]
vb6.0制作标准的DLL参见:
http://blog.csdn.net/TechnoFantasy/archive/2004/04/13/2974.aspx
我没有VB环境,没法测试,不过我影像里要用byval的.个人感觉这个只是作为一个测试用(很久以前的确测试过).一般情况下,要么直接用C写DLL(估计很少有人用VB写标准的DLL)要么按楼上的,用activeX的调用方式