动态调用.DLL!!!急!急!

lodestar80 2003-08-21 11:56:46

int _stdcall (*filecopy)(char *source,char *dest);
HINSTANCE DLLInst=NULL;
if(DLLInst==NULL)
DLLInst=LoadLibrary("DLL.dll");
if(DLLInst) (FARPROC &)filecopy=GetProcAddress(DLLInst,"filecopy");

执行后DLLInst还是为NULL,不知那里出错了
还有就是对于函数的定义不知这样对不对?

filecopy(FromF.c_str(),ToF.c_str());这样调用对吗
...全文
38 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
种瓜的 2003-09-05
  • 打赏
  • 举报
回复
这个问题应该出在你的DLL程序中,如果在定义时用如下这种

extern "C" void __stdcall Logining(TIBDatabase *MainIB,bool *login,AnsiString *username,AnsiString *scbv);
//产生登录窗口.
#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
return 1;
}
//---------------------------------------------------------------------------
void _export _stdcall Logining(TIBDatabase *MainIB,bool *login,AnsiString *username,AnsiString *scbv)
{
TForm2 *tmp = new TForm2(NULL,MainIB,login,username,scbv);
tmp->ShowModal();
delete tmp;
}
这样才能被GetProcAddress找到。如果定义为其它时候就找不到,我试过
sun_wyz 2003-08-23
  • 打赏
  • 举报
回复
else
{ShowMessage("老婆选择错误!!!\n请重新选择!!");}
COKING 2003-08-23
  • 打赏
  • 举报
回复
Dll.dll 路径不对!
Atomictry 2003-08-22
  • 打赏
  • 举报
回复
这样调程序,其乐无穷。向您学习。
Atomictry 2003-08-22
  • 打赏
  • 举报
回复
楼上,高,没辱没姓高。:)
mabc 2003-08-21
  • 打赏
  • 举报
回复
这是我的代码
{
//typedef VOID (*MYPROC)(LPTSTR);
typedef int (*MyFun)(char* PcmFileName,char* WaveFileName); //定义函数名
HINSTANCE hinstLib; //定义句柄
MyFun MyPcmToWave;

String s_from,s_to;
s_from ="c:\\voc\\234.pcm";
s_to ="c:\\voc\\234.wav";
int i_turn;
BOOL fFreeResult, fRunTimeLinkSuccess = FALSE;

hinstLib = LoadLibrary("DLL.dll"); //获得该DLL的句柄
if (hinstLib != NULL)
{
MyPcmToWave = (MyFun) GetProcAddress(hinstLib, "PcmtoWave"); //获取函数的地址
//if (fRunTimeLinkSuccess = (MyPcmToWave != NULL))
(MyPcmToWave)(s_from.c_str(),s_to.c_str());

fFreeResult = FreeLibrary(hinstLib); //释放句柄
}

//i_turn = PcmtoWave(s_from.c_str(),s_to.c_str());
}
starstargao 2003-08-21
  • 打赏
  • 举报
回复
HINSTANCE Dll = LoadLibrary("Dyna.dll");
if(Dll)
{
LoadDll = (SayType *)GetProcAddress(Dll,"_GetName");
if(LoadDll)
LoadDll("sssssssssss");
else
ShowMessage("sdfsdfsdfsf");
FreeLibrary(Dll);
if(Dll != NULL)
{
ShowMessage("我爱老婆");
}
}

else
ShowMessage("我爱顾志英");
//我在头文件中间加了以下语句
typedef void __declspec(dllimport) SayType(char*);
SayType *LoadDll;
hongliqiu 2003-08-21
  • 打赏
  • 举报
回复
另外,可以用GelLastError()函数查看一下错误号,再查查MSDN。
hongliqiu 2003-08-21
  • 打赏
  • 举报
回复
HINSTANCE hinstLib; //定义句柄 >> 初始化为NULL;

String s_from,s_to; //>>改成AnsiString试试;

(MyPcmToWave)(s_from.c_str(),s_to.c_str()); //>>改成MyPcmToWave(...);试试。

如果运行到
hinstLib = LoadLibrary("DLL.dll"); //获得该DLL的句柄
之后hinstLib还是NULL,很可能你的Dll.dll的dir不对。

1,221

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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