2

私は関数を.dll使用していると思われますが、完全に装飾されていない名前 (アンダースコアや記号でさえありません) を持っています。次のようなエイリアスでファイルを作成しました__stdcall@.def

func1 = func1
func1@4 = func1

libしかし、(ファイルからインポートライブラリを作成するために使用している)エイリアスを無視していると思います(.defリンカーはまだfunc1@4未定義であると言います)

func1@4にマップするインポート ライブラリを作成するにはどうすればよいfunc1ですか?

4

2 に答える 2

2

.libで正しいファイルを作成できるかどうかわからないlib.exeので、元の DLL によってエクスポートされた関数のスタブを使用して DLL を作成することをお勧めします。

サンプルdll.cppファイル:

void __stdcall foo(int) {}

dll.defファイル:

EXPORTS
foo=foo

次に、IDE またはコマンド ラインからコンパイルします。

cl dll.cpp /link /dll /def:dll.def /noentry

正しいdll.libファイルが作成されるため、次のようなコードで使用できます。

void __stdcall foo(int);
#pragma comment(lib, "dll")
int main()
{
    foo(42);
}
于 2012-03-26T13:00:03.923 に答える
0

(明らかに) C++ モードでコンパイルしているので、関数プロトタイプを extern "C" として宣言する必要があります。

extern "C" void func1(void); // correct prototype, add __stdcall if necessary?

ヘッダーファイルのセクション全体を内部にラップできます

extern "C" {
    // ... C compatible declarations
}
于 2012-03-26T10:42:52.993 に答える