0

с:/catalog 中有三个文件。它们是 lib.dll、conf.ini、libImp.cpp。我在 libImp.cpp 文件中调用 lib.dll “init”函数。为了成功调用“init”函数,conf.ini 必须位于同一目录中。问题是如果我尝试从另一个目录调用 dll 函数,则会出现错误。它说它没有看到conf.ini。例如,如果 libImp.cpp 位于 c:/catalog2,则会出现该错误。响应调用 dll 函数的代码部分:

HINSTANCE hGetProcIDDLL = LoadLibrary("c:\\catalog\\lib.dll");
FARPROC lpfnGetProcessID = GetProcAddress(HMODULE (hGetProcIDDLL),"init");
typedef int (__stdcall * pICFUNC)(char *);

pICFUNC init;
init = pICFUNC(lpfnGetProcessID);

bool result = 0;
char user_id[]="user";
result = init(user_id);

如何独立于cpp文件位置进行函数调用?

4

1 回答 1

1

你在混合概念。

.cpp 文件用作编译器的输入,不能自行执行。输入文件libImp.cpp是否位于c:\catalog\. 编译器输出(我假设是 .EXE?)在哪里结束可能很重要。

.INI 文件的位置由 DLL 中的代码确定。它正在加载 INI 文件,因此它决定在哪里查找 INI 文件。我们无法猜测它在寻找什么。可以使用像 SysInternals ProcMon 这样的工具来监视 DLL 并检查它的位置。

于 2012-06-15T12:38:57.497 回答