如何使用DLL,请指教

Tone_zrt 2001-09-07 04:43:37
我最近在用BCB5.0写DLL,第一次使用。感觉有很多疑惑,请各位指教。我的DLL原本如下:
extern "C" __declspec(dllexport) int __stdcall test();
extern "C" __declspec(dllexport) int __stdcall test1(int iTmp);

int __stdcall test()
{ return 3; }

int __stdcall test1(int iTmp)
{ return iTmp; }

test仅仅返回一个常数,test1发挥参数的值。

我的调用函数如下:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
HINSTANCE dd;
int _stdcall (*ddd)(void);
int _stdcall (*aaa)(int iTmp);
String sTemp;
dd = LoadLibrary("dll.dll");
ddd = GetProcAddress(dd , "test");
//----------------------
aaa = GetProcAddress(dd , "test1");
//----------------------
ShowMessage((int)GetProcAddress(dd , "test1"));
Caption = IntToStr(ddd());
FreeLibrary(dd);
}
在aaa.....这一句编译报错,无法通过。但是GetProcAddress(dd , "test1")已经得到了地址,这是为什么?
假如一个DLL里的函数要从外部得到参数,经过处理后以各种类型返回如何处理?比如int , long , String , AnsiString等等。最好能给一个详细地说明,谢谢!
...全文
116 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tone_zrt 2001-09-08
  • 打赏
  • 举报
回复
谢谢asdmusic8,按照你讲的方法我试了试,OK!
但是我曾尝试了用FARPROC进行强制转换,也是可以运行的。请问:
1、两者有什么区别?
2、假如我把对象作为参数(例如:TADOQuery)传入dll中的函数处理,dll可以正常处理吗?
谢谢!
tjm 2001-09-07
  • 打赏
  • 举报
回复
asdmusic8(asdmusic8) 说的对,特别GetProcAddress那里强制转换一下
asdmusic8 2001-09-07
  • 打赏
  • 举报
回复
dd = LoadLibrary("Project1.dll");
换成
dd = LoadLibrary("dll.dll");
asdmusic8 2001-09-07
  • 打赏
  • 举报
回复
HINSTANCE dd;
int (__stdcall *ddd)();
int (__stdcall *aaa)(int iTmp);
int Temp;
dd = LoadLibrary("Project1.dll");
if (dd){
ddd = (int (__stdcall *)( ))GetProcAddress(dd , "test");
aaa = (int (__stdcall *)(int iTmp))GetProcAddress(dd , "test1");
if (ddd) ShowMessage(ddd());
if (aaa) ShowMessage(aaa(5));
}

FreeLibrary(dd);



13,871

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧