【发布时间】:2012-08-16 19:05:18
【问题描述】:
我目前正在尝试使用第三方提供的 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(如果有帮助?)。
【问题讨论】:
-
一个小的修正 DllImport 是 pinvoke 而不是 Com 互操作。 msdn.microsoft.com/en-us/library/ms173185.aspx
-
@AmitMittal 更新了标签和标题,谢谢 :)
-
不要为数组添加
ref关键字。它们已经是参考。仅将ref关键字添加到原始值。 -
您能否发布
FORTRAN函数声明以及参数和类型。