做好了一个DLL文件,发现在Win98中无法动态装入,而2K与XP中正常。
同样的另一个文件却可使用,
在测试中查出错号,却是少了个库文件。
如何找出是那个库文件?
附:测试片断。(这个文件总是提示“文件调入失败!xxxx”)
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (OpenDialog1->Execute())
{
Memo1->Lines->Clear();
Edit1->Text = OpenDialog1->FileName;
HINSTANCE LoadExDLL = LoadLibrary(OpenDialog1->FileName.c_str());
void (__stdcall *InvokeInterface)(TStrings *,
AnsiString __stdcall (__closure *)(AnsiString, AnsiString)) = NULL;
if (LoadExDLL)
{
(FARPROC) InvokeInterface = GetProcAddress(LoadExDLL,"InvokeInterface");
if (InvokeInterface)
{
try
{
InvokeInterface(Memo1->Lines, GetLangString);
}
catch (...)
{
Memo1->Lines->Add("函数调用出错!");
}
}
else Memo1->Lines->Add("接口未能读取!");
FreeLibrary(LoadExDLL);
}
else
{
Memo1->Lines->Add("文件调入失败!" + IntToStr(GetLastError()));
}
}
}
//---------------------------------------------------------------------------
AnsiString __stdcall TForm1::GetLangString(AnsiString Ident, AnsiString Df_Str)
{
return Df_Str;
}
//---------------------------------------------------------------------------
问题点数:200、回复次数:9Top
1 楼shadowstar(CodeFast for Delphi & C++Builder)回复于 2005-11-03 12:55:11 得分 50
可能是某个WINAPI在WIN98下不支持,可以用MS VS Tools: Depends.Exe查看一下。Top
2 楼ccrun(老妖)(www.ccrun.com)回复于 2005-11-03 12:55:41 得分 80
你用String作了Dll导出函数的参数了?Top
3 楼constantine(飘遥的安吉儿)回复于 2005-11-03 13:32:24 得分 50
参数跟返回类型一般都不要用AnsiString,用了就要用ShareMem
你加个断点看看到底到哪行出问题的Top
4 楼sczyq(我又...........)回复于 2005-11-03 13:40:06 得分 0
其实还是得感谢ccrun(老妖)(www.ccrun.com)
我到你的网站上下载了一个 Spy4Win 程序,来检查调入的库文件,
还真是找到了是少了一个文件 dsnap60.bpl 将这个文件COPY到98的SYSTEM目录
一切OK!Top
5 楼constantine(飘遥的安吉儿)回复于 2005-11-03 14:08:56 得分 0
Spy4Win有这个功能?Top
6 楼sjchao(阳光流溢)回复于 2005-11-03 14:24:33 得分 10
星星渐欲迷人眼....Top
7 楼ccrun(老妖)(www.ccrun.com)回复于 2005-11-03 14:26:49 得分 0
Spy4Win有个小功能就是可看进程所调用的模块。呵呵。Top
8 楼sczyq(我又...........)回复于 2005-11-04 13:23:37 得分 0
是在可用时的库文件加载情况与不可用时的加载情况比较,建议Spy4Win能通过进行文本识别能更方便地找出缺少的文件(库)。Top
9 楼newbiebcb(你好)回复于 2005-11-04 13:53:27 得分 10
拿分啊Top




