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++ 的可再发行包。我在 2008 年和 2010 年都在 x86 和 x64 平台上做到了这一点,但仍然没有乐趣。

有人有什么想法吗?我正在使用 Visual Studio 2010 和 Windows 7(如果有帮助?)。

4

1 回答 1

1

问题是DebugCRT。您已经获得了该 DLL 的调试版本,并且它依赖于 CRT 的调试版本。这需要适当版本的 Visual Studio,这是在您的计算机上获取 CRT 调试版本的唯一方法。即 Visual Studio 2008,由 9.0 版本号表示。如果您还没有此 DLL 的源代码,则无法使用调试版本。您也无法在客户的机器上部署并运行此 DLL。

通过联系所有者并要求发布版本来取得成功,以便可再分发的包可以工作。

于 2012-08-21T12:57:07.250 回答