1

現在、サードパーティから提供された FORTRAN DLL を使用しようとしています。現在、他のベンダーによって以前に使用されていました (C# を使用して使用したかどうかは不明です) が、使用しようとすると参照エラーが発生します。

私は基本的に、小さなテストアプリ内で動作させようとしています。

インポートに使用しているC#コードは次のとおりです(実際には基本的なCOMです):

[DllImport("foo.dll")]
public static extern void foo(ref int IS, ref double[] BETA, ref int K, out double TH, out double SETH, out int IER);

static void Main(string[] args)
{
    double[] betas = new double[3];
    betas[0] = 25.6;
    betas[1] = 30.8;
    betas[2] = 35.8;

    int score = 5;
    int numberOfItems = 3;
    double latentVariable;
    double standardErrorOfEstimate;
    int errorCode;

    foo(ref score, ref betas, ref numberOfItems, out latentVariable, out standardErrorOfEstimate, out errorCode);

        Console.ReadLine();
}

注: DLL メソッドの署名は、私が持っているものと一致します。

アプリケーションを実行しようとすると、次の例外が発生します。

DLL 'foo.dll' をロードできません: サイド バイ サイド構成が正しくないため、アプリケーションを開始できませんでした。詳細については、アプリケーション イベント ログを参照するか、コマンド ライン sxstrace.exe ツールを使用してください。(HRESULT からの例外: 0x800736B1)

イベント ログを見ると、次の詳細がエラーに表示されます。

"C:\dllpath\foo.dll" のアクティベーション コンテキストの生成に失敗しました。依存アセンブリ Microsoft.VC90.DebugCRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8" が見つかりませんでした。詳細な診断には、sxstrace.exe を使用してください。

また、sxstrace を実行すると、同じ情報とエラーが表示されます。

エラー: 参照 Microsoft.VC90.DebugCRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8" を解決できません。エラー: アクティベーション コンテキストの生成に失敗しました。アクティベーション コンテキストの生成を終了します。

ここで、グーグルで調べて見回した後、一部の人々は C++ 用の再頒布可能パッケージをインストールすることを推奨しています。x86 プラットフォームと x64 プラットフォームの両方で 2008 年と 2010 年の両方でそれを実行しましたが、まだ満足していません。

誰でもアイデアはありますか?Visual Studio 2010 と Windows 7 を使用しています (それが役立つ場合)。

4

1 に答える 1

1

問題はDebugCRTです。その DLL のデバッグ ビルドがあり、CRT のデバッグ ビルドに依存しています。これには、適切なバージョンの Visual Studio が必要です。これは、コンピューターで CRT のデバッグ ビルドを取得する唯一の方法です。9.0 バージョン番号で示される Visual Studio 2008 です。この DLL のソース コードも持っていない場合、デバッグ ビルドは役に立ちません。また、この DLL を展開して顧客のマシンで動作させることもできません。

再配布可能なパッケージが機能するように、所有者に連絡してリリース ビルドを依頼して先に進みましょう。

于 2012-08-21T12:57:07.250 に答える