首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

关于BCB调用 VB写的DLL解决思路

2012-04-16 
关于BCB调用 VB写的DLLBCB 6,用BCB来调用VB写的DLL,这里称为VBDLL.DLLtypedef bool _stdcall _export(*F

关于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有无正确加载

[解决办法]

C/C++ code
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的调用方式

热点排行