use*_*756 7 c++ fortran function-pointers language-interoperability void-pointers
我大致有以下情况.我有一个从Fortran代码调用的C++函数,并将函数指针和void指针作为这样的参数
int STDCALL FORTRAN_NAME(CPPFunction, CPPFUNCTION)(
int (*userFunction)(const int *object,
const void *userFunctionUserData),
const void *userData)
{
// ...
int index;
int result;
// ...
result = userFunction(&index, userData);
// ...
}
Run Code Online (Sandbox Code Playgroud)
这是从Fortran这样调用的
! ...
DOUBLE PRECISION, ALLOCATABLE :: data(:,:)
INTEGER :: n, result
! ...
ALLOCATE(data(3,n)); data = 0.0
! ... fill data with something
result = CPPFUNCTION(FORTRANFUNCTION, data)
! ...
Run Code Online (Sandbox Code Playgroud)
我希望通过函数指针传递的Fortran函数看起来像
INTEGER FUNCTION FORTRANFUNCTION(idx, data)
IMPLICIT NONE
INTEGER, INTENT(IN) :: idx
DOUBLE PRECISION, INTENT(IN) :: data(*)
INTEGER :: i, offset
offset = 3 * (idx - 1)
WRITE(*,*) 'data(offset + 1) = ', data(offset + 1)
WRITE(*,*) 'data(offset + 2) = ', data(offset + 2)
WRITE(*,*) 'data(offset + 3) = ', data(offset + 3)
END FUNCTION FORTRANFUNCTION
Run Code Online (Sandbox Code Playgroud)
如果我开始整个事情CPPFunction似乎被正确调用,它调用FORTRANFUNCTION,我得到一个异常代码
c0000005 ACCESS_VIOLATION
Run Code Online (Sandbox Code Playgroud)
完全在FORTRANFUNCTION第一次访问数组数据的行中.
WRITE(*,*) 'data(offset + 1) = ', data(offset + 1)
Run Code Online (Sandbox Code Playgroud)
有人能告诉我我的错误在哪里吗?我还要提一下,C++ - 函数不是我的.改变它并非不可能,但它会影响许多其他代码.Fortan部分完全在我的控制之下,我可以用它做我想做的事.
谢谢.
| 归档时间: |
|
| 查看次数: |
816 次 |
| 最近记录: |