主题:请教Fortran编译DLL在C#中调用的问题
首先说一下自己电脑及IDE。
操作系统:Win7 x64
Fortran:Intel.Visual.Fortran.Composer.XE.2011.5.221
Visual Studio 2005
在Fortran中建立了一个DLL库项目,Dynamic-link Library。
代码如下:(定义了一个函数和一个子程序)
Function FAddFunction(a,b)
!DEC$ ATTRIBUTES DLLEXPORT::FAddFunction
implicit none
Real :: a,b,FAddFunction
FAddFunction=a+b
Return
End Function
SubRoutine Test(a,b,c)
implicit none
!DEC$ ATTRIBUTES DLLEXPORT::Test
Real :: a,b,c
c=a+b
End SubRoutine
然后编译DLL,编译成功。
接下来在新建一个C#的Windows窗体项目,在引用中添加这个编译的Dll就出现下面的错误:
“未能条件对...的引用,请确保此文件可访问并且是一个有效的程序集或COM组件。”
根据网上大家说的方法,使用DllImport来导入,于是在CS文件中写到:
[DllImport("Dll1.dll",EntryPoint="FAddFunction")]
public static extern double FAddFunction(ref double A,ref double B);
[DllImport("Dll1.dll", EntryPoint = "TEST")]
public static extern void TEST(ref double A, ref double B, ref double C);
在按钮点击事件里面添加调用:
private void button1_Click(object sender, EventArgs e)
{
double A, B,result=0;
A = 10;
B = 20;
// double result = FAddFunction(ref A,ref B);
TEST(ref A, ref B, ref result);
MessageBox.Show(result.ToString());
}
运行时出现如下错误:
“无法加载 DLL“Dll1.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。”
[img]http://p13.freep.cn/p.aspx?u=v20_p1_photo_1110231715273285_0.jpg[/img]
[img]http://p13.freep.cn/p.aspx?u=v20_p1_photo_1110231716307523_0.jpg[/img]
操作系统:Win7 x64
Fortran:Intel.Visual.Fortran.Composer.XE.2011.5.221
Visual Studio 2005
在Fortran中建立了一个DLL库项目,Dynamic-link Library。
代码如下:(定义了一个函数和一个子程序)
Function FAddFunction(a,b)
!DEC$ ATTRIBUTES DLLEXPORT::FAddFunction
implicit none
Real :: a,b,FAddFunction
FAddFunction=a+b
Return
End Function
SubRoutine Test(a,b,c)
implicit none
!DEC$ ATTRIBUTES DLLEXPORT::Test
Real :: a,b,c
c=a+b
End SubRoutine
然后编译DLL,编译成功。
接下来在新建一个C#的Windows窗体项目,在引用中添加这个编译的Dll就出现下面的错误:
“未能条件对...的引用,请确保此文件可访问并且是一个有效的程序集或COM组件。”
根据网上大家说的方法,使用DllImport来导入,于是在CS文件中写到:
[DllImport("Dll1.dll",EntryPoint="FAddFunction")]
public static extern double FAddFunction(ref double A,ref double B);
[DllImport("Dll1.dll", EntryPoint = "TEST")]
public static extern void TEST(ref double A, ref double B, ref double C);
在按钮点击事件里面添加调用:
private void button1_Click(object sender, EventArgs e)
{
double A, B,result=0;
A = 10;
B = 20;
// double result = FAddFunction(ref A,ref B);
TEST(ref A, ref B, ref result);
MessageBox.Show(result.ToString());
}
运行时出现如下错误:
“无法加载 DLL“Dll1.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。”
[img]http://p13.freep.cn/p.aspx?u=v20_p1_photo_1110231715273285_0.jpg[/img]
[img]http://p13.freep.cn/p.aspx?u=v20_p1_photo_1110231716307523_0.jpg[/img]