using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
[DllImport(@"C:\Users\ZHL\Desktop\ConsoleApplication1\Dll1\Debug\Dll1.dll", EntryPoint = "Add")] //指定DLL路径,声明外部Add
extern static int Add(int A,int B);
static void Main(string[] args)
{
int c = Add(1,2);
Console.WriteLine(c); //打印c值,正确值为3
Console.Read();
}
}
}
subroutine Add(A,B) Bind(C,Name="Add")
!DEC$ ATTRIBUTES DLLEXPORT :: Add
use , Intrinsic :: ISO_C_Binding
implicit none
integer A,B
return A+B
RETURN
end subroutine
Integer Function Add(A,B) Bind(C,Name="Add")!//要返回的话,请用 Function
!DEC$ ATTRIBUTES DLLEXPORT :: Add
use , Intrinsic :: ISO_C_Binding
implicit none
integer , value :: A , B !/c#默认是传值,而fortran默认传址。因此要用value修饰
Add = a + b !// Add(函数名)用于返回,而不能写 return a+b
end Function Add
zhuhuanlai 发表于 2016-11-22 21:21
感谢大侠的及时指点,我成功的再现了您的方法,再次感谢!
由于个人水平非常有限,有些尚不明白,还请耐 ...
MC%}{]@X1ILX04A}TNAG{}D.png (31.52 KB, 下载次数: 350)
图一
TBF}HZ9`356~4{FTN$}PHL3.png (16.42 KB, 下载次数: 331)
图二
fcode 发表于 2016-11-22 21:48
1. 不同的语言(甚至同一个语言的不同编译器),都会对函数名字进行修饰(符号修饰),比如把 Add 变成 _Ad ...
欢迎光临 Fortran Coder (http://bbs.fcode.cn/) | Powered by Discuz! X3.2 |