3

マネージC++とプレーンC++を単純に組み合わせて動作させようとしています。Visual Studio 2005を使用していますが、問題が発生し続けています。これが私の設定です。

まず、コードから構築された単純なDLLがあります

#using "mscorlib.dll"

#include "windows.h"

__declspec(dllexport)
void sayHello()
{
    OutputDebugStringA( "Hello from managed code!" );
}

コマンドラインでこれを使用してDLLにコンパイルします

cl /CLR /LD dllcode.cpp

次に、私はただからなる簡単なプログラムを持っています

#include <windows.h>
int main()
{
    HINSTANCE lib = LoadLibrary( "dllcode.dll" );
    if ( !lib ) {
        return 1;
    }
    return 0;
}

私はこれからアプリケーションを構築します

cl loader.cpp

だから私は同じディレクトリに行き着きますdllcode.dllloader.exeを実行しようとするとloader.exe、常に戻りコード「1」が返されます。によって生成されたエラーコードを検索すると、次の理由GetLastError()で読み込みdllcode.dllに失敗したことがわかりますThe specified module could not be found.

なぜこれができるのか誰かが知っていますか?マニフェストに埋め込む必要があるマニフェストと関係がありdllcode.dllますか?dllcode.dllでdependsプログラムを実行しましたが、私が知る限り、問題は発生しませんでした。

4

2 に答える 2

4

バニラ C++ プログラムからマネージ C++ DLL をロードできない理由がわかりました。便利なツールを教えてくれた jdigital にもう一度感謝します。

エラーの原因は、MSVC8 ランタイム ライブラリが見つからなかったことです。ビルド時に生成されるマニフェストは

cl /CLR /LD dllcode.cpp

はすでに DLL に組み込まれています。どうやらそうではないので、ローダーは適切な MSVCR80.dll のコピーを見つけられませんでした。

DLL 構築ルーチンに 2 番目のステップを追加して、この問題を修正しました。

cl /CLR /LD dllcode.cpp
mt -manifest dllcode.dll.manifest -outputresource:dllcode.dll;2

お役に立てれば。かなり初歩的な問題だと思います...

于 2009-04-16T18:25:04.167 に答える
0

filemonを使用して、LoadLibrary が何をロードしようとしているのかを確認してみてください。

于 2009-04-16T18:01:34.770 に答える