現在、サードパーティから提供された 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 を使用しています (それが役立つ場合)。