delphi的dll如何在bcb里调宜用???(5分)

  • 主题发起人 主题发起人 mazheng
  • 开始时间 开始时间
M

mazheng

Unregistered / Unconfirmed
GUEST, unregistred user!
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3470797
 
bcb 还不是跟delphi一样
 
关键是如何写
 
大家帮帮忙啊
 
个人愚见:首先要知道该动态库引出函数,然后调用就是了,下面是一个动态调用的例子:
//动态调用dll
//无参数情况
HINSTANCE dd;
AnsiString dllfile=ExtractFilePath(Application->ExeName)+"CXmlProcess.dll";
int _stdcall (*ddd)(void);
dd=LoadLibrary(dllfile);
ddd=GetProcAddress(dd,"test");
Caption=IntToStr(ddd());
FreeLibrary(dd);

//有参数调用,有int 返回值
HINSTANCE hinstance;
AnsiString a=ExtractFilePath(Application->ExeName)+"mydll.dll";
int (*nsetup)(HWND,int);//有两个参数
hinstance=LoadLibrary(WideString(a));
if(hinstance)
{
nsetup=(int(*)(HWND,int))::GetProcAddress(hinstance,"nsetup");//带参数指定函数入口
int i=nsetup(Application->Handle,5);//带入实参
}
FreeLibrary(hinstance);
//有参数调用,有char * 指针型返回值
HINSTANCE hinstance;//定义一个实例变量
char *r;//接收返回的指针
AnsiString s="I love you 我爱你";//参数1
AnsiString dllfile=ExtractFilePath(Application->ExeName)+"CXmlProcess.dll";
char * (*ToUTF_8)(char *,int );//定义指向动态库的函数名*ToUTF_8变量,有两个参数,返回值为char * 指针型
hinstance=LoadLibrary(WideString(dllfile));//读入动态库
if(hinstance)
{
ToUTF_8=(char*(*)(char *,int))::GetProcAddress(hinstance,"translateCharToUTF_8");//带参数指定函数入口地址
if(ToUTF_8)
{
r=ToUTF_8(s.c_str(),s.Length());//带入实参
TntMemo1->Clear();
TntMemo1->Lines->Add(r);
}
FreeLibrary(hinstance);
}
 
关于如何创建,我这里也有一些说明,可以参考
//BCB创建dll
 #include
 #pragma hdrstop
//函数声明:
extern "C"
{
__declspec(dllexport) __stdcall do
uble nread(void);
__declspec(dllexport) __stdcall void nopen(void);
__declspec(dllexport) __stdcall void nclose(void);
__declspec(dllexport) __stdcall int nsetup(HWND,int);//带参数
}
//主程序入口:
  int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason,void *)
  {
   return 1;
  }
//函数体:
double __stdcall nread(void)
{
do
uble bbb=0;
bbb=Form4->Button1->Caption.ToDouble();
return bbb;
}
...
 
后退
顶部