C#与fortran混编调用不了dll
本帖最后由 kyra 于 2024-5-14 16:00 编辑用C#调用fortran的dll,传递的参数只有一个字符串,但就是死活调用不起来,有哪个大神知道这是怎么回事吗fortran:
subroutine mainsolve(projectname)
!DEC$ATTRIBUTES DLLEXPORT :: mainsolve
!DEC$ ATTRIBUTES ALIAS:'mainsolve'::mainsolve
use, intrinsic :: ISO_C_BINDING
implicit none
character*16 :: projectname
...
end subroutine
C#:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
namespace cstest
{
class FortranMethod
{
public static extern void mainsolve(ref string a);
static void Main(string[] args)
{
string a = "try";
mainsolve(ref a);
}
}
}
对了,编译器的是vs2022+oneapi Fortran 这边用以下代码,这样,这个dll就和C语言完全一模一样了:
Subroutine mainsolve(cprojectname) Bind(C,Name="mainsolve")
!DEC$ATTRIBUTES DLLEXPORT :: mainsolve
use, intrinsic :: ISO_C_BINDING
implicit none
type(c_ptr) , value :: cprojectname
character(len=16) , pointer :: projectname
call c_f_pointer( cprojectname , projectname )
end subroutine mainsolve
C#这边我不太懂。AI 给出的答案,不一定对:
using System;
using System.Runtime.InteropServices;
class Program {
public static extern void mainsolve( string str);
static void Main() {
// 调用DLL中的函数
string a = "try";
mainsolve(a);
}
} kyra 发表于 2024-5-14 16:48
Fortran 这边用以下代码,这样,这个dll就和C语言完全一模一样了:
Subroutine...
fortran那块发生报错了,加的bind和type(c_ptr)都编译不了 1468592801 发表于 2024-5-15 10:03
fortran那块发生报错了,加的bind和type(c_ptr)都编译不了
用的什么编译器?截图看看错误提示 kyra 发表于 2024-5-15 10:17
用的什么编译器?截图看看错误提示
subroutine mainsolve(projectnamec) bind(C, name='mainsolve')
!DEC$ATTRIBUTES DLLEXPORT :: mainsolve
use, intrinsic :: ISO_C_BINDING
implicit none
character(kind = c_char), intent(in) :: projectname
我这样写就好了,请问这样写是可以的吗 kyra 发表于 2024-5-15 10:17
用的什么编译器?截图看看错误提示
用的编译器的vs2022+oneapi 1468592801 发表于 2024-5-15 11:04
subroutine mainsolve(projectnamec) bind(C, name='mainsolve')
!DEC$ATTRIBUTES DLLEXPORT ...
这样写的话,你的 projectname 长度只有1
截图给错误提示。这是求助问题的基本信息 kyra 发表于 2024-5-15 13:32
这样写的话,你的 projectname 长度只有1
截图给错误提示。这是求助问题的基本信息 ...
不好意思,用你的可以编译,是我之前写错了,现在的情况就是C#加载不出来我的dll,感觉应该是有其他的fortran用的dll没添加进C#里,但具体是什么情况我也不清楚,网上说这个报错什么类型的都有 dlllose.w.fcode.cn 可能对你有帮助
页:
[1]
2