0

с:/catalog には 3 つのファイルがあります。lib.dll、conf.ini、libImp.cpp です。そして、libImp.cpp ファイルで lib.dll の "init" 関数を呼び出します。「init」関数の呼び出しを成功させるには、同じディレクトリに conf.ini を配置する必要があります。問題は、別のディレクトリから dll 関数を呼び出そうとすると、エラーが表示されることです。conf.ini が表示されないと表示されます。たとえば、libImp.cpp が c:/catalog2 にある場合、そのエラーが表示されます。call 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 に答える