将C#Array传递给Fortran [英] Pass C# Array to Fortran

查看:59
本文介绍了将C#Array传递给Fortran的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

您好,



我尝试将1D阵列从C#-DLL传递给Fortran。为此,我使用R. Giesecke DllExport。这使得我的托管DLL变为带有.lib文件的非托管DLL。传递正常参数效果很好。请参阅此处: https://software.intel.com/en-us/forums/topic/517631

1D-Array的大小总是6!数组的大小永远不会改变指定的值。



这里我的代码用C#:

 使用系统; 
使用 System.Text;
使用 RGiesecke.DllExport;
使用 System.Runtime.InteropServices;

命名空间 Testme
{
class 测试
{
[DllExport( Get1DArray,CallingConvention = CallingConvention.Cdecl)]
public static int Get1DArray ([MarshalAs(UnmanagedType.LPArray,SizeConst = 5 )] int []压力)

{

压力[ 0 ] = 0 ;
压力[ 1 ] = 1 ;
压力[ 2 ] = 2 ;
压力[ 3 ] = 3 ;
压力[ 4 ] = 4 ;
压力[ 5 ] = 5 ;

return 压力[ 5 ];
}

}
}



和我的Fortran代码:

 MODULE MYEXTERNALS 
USE iso_c_binding
INTERFACE
FUNCTION Get1DArray(Stress)RESULT(ret)bind(c,name = Get1DArray
!DEC $ ATTRIBUTES DLLIMPORT :: Get1DArray
USE,intrinsic :: iso_c_binding
INTEGER(c_int), intent( in ):: Stress( 6
INTEGER(c_int):: ret
结束功能
结束接口
结束模块MYEXTERNALS


计划CallArray
使用MYEXTERNALS
IMPLICIT NONE
INTEGER( c_int)::压力( 6
PRINT *,' 1DArray =',Get1DArray(压力)
PAUSE
END PROGRAM CallArray



调试后我得到以下输出:



'CallArrayDll.exe':已加载'\ \\ cifs\cluster\Home\ca416444 \ WinDocuments\Masterarbeit\C#Dllexport \to Fortran \ 1DArray2 \ CallArrayDll \Debug\CallArrayDll.exe',符号已加载。



'CallArrayDll.exe':已加载'C:\ Windows \SysWOW64 \ antdll.dll',无法找到或打开PDB文件



'CallArrayDll.exe':已加载'C:\ Windows \SysWOW64 \ kernel32.dll',无法找到或打开PDB文件



'CallArrayDll.exe':已加载'C:\ Windows \SysWOW64 \KernelBase.dll',无法找到或打开PDB文件



'CallArrayDll .exe':已加载'\\cifs \cluster\Home\ca416444 \WinDocuments \ Masterarbeit \ C#Dllexport \ to Fortran \1DArray2 \CallArrayDll \Debug \ ArrayDll.dll',符号文件中没有原生符号。



'CallArrayDll.exe':已加载'C:\ Windows \SysWOW64 \\ \\ ms coree.dll',找不到或打开PDB文件



'CallArrayDll.exe':已加载'C:\ Windows \SysWOW64 \ imagehlp.dll' ,找不到或打开PDB文件



'CallArrayDll.exe':已加载'C:\ Windows \SysWOW64 \ msvcrt.dll',找不到或者打开PDB文件



'CallArrayDll.exe':加载'C:\ Windows \SysWOW64 \ _advapi32.dll',无法找到或打开PDB文件



'CallArrayDll.exe':加载'C:\ Windows \SysWOW64 \sechost.dll',无法找到或打开PDB文件



'CallArrayDll.exe':已加载'C:\ Windows \SysWOW64 \rpcrt4.dll',无法找到或打开PDB文件



'CallArrayDll.exe':已加载'C:\ Windows \SysWOW64 \sspicli.dll',无法找到或打开PDB文件



'CallArrayDll.exe':已加载'C:\ Windows \SysWOW64 \cryptbase.dll ,无法找到或打开PDB文件



'CallArrayDll.exe':已加载'C:\ Windows \ Microsoft \\ .NET \ Framework \v4.0.30319 \ msmsee.dll',无法找到或打开PDB文件



'CallArrayDll.exe':已加载'C:\ Windows \SysWOW64 \shlwapi。 dll',无法找到或打开PDB文件



'CallArrayDll.exe':加载'C:\ Windows \SysWOW64 \ gdi32.dll',不能找到或打开PDB文件



'CallArrayDll.exe':加载'C:\ Windows \SysWOW64 \ user32.dll',找不到或打开PDB文件



'CallArrayDll.exe':加载'C:\ Windows \SysWOW64 \ lpk.dll',无法找到或打开PDB文件



'CallArrayDll.exe':已加载'C:\ Windows \SysWOW64 \ uspp.dll',无法找到或打开PDB文件



'CallArrayDll.exe':已加载'C:\ Windows \SysWOW64 \\ imm32.dll',无法找到或打开PDB文件



'CallArrayDll.exe':已加载'C:\ Windows \SysWOW64 \ msctf.dll' ,无法找到或打开PDB文件



'CallArrayDll.exe':已加载'C:\ Windows \ Microsoft \\ .NET \ Framework \v4.0.30319 \ clr.dll',无法找到或打开PDB文件



'CallArrayDll.exe':已加载'C:\ Windows \SysWOW64 \msvcr110_clr0400。 dll',无法找到或打开PDB文件



CallArrayDll.exe中0x75c8c42d的第一次机会异常:0x04242420:0x4242420。



'CallArrayDll.exe':已加载'C:\ Windows \assembly\NativeImages_v4.0.30319_32\mscorlib\ce5f61c5754789df97be8dc991c47d07\mscorlib.ni.dll',无法找到或打开PDB文件



'CallArrayDll.exe':加载'\ ArrayDll.dll',没有加载符号。



'CallArrayDll.exe':已卸载\ ArrayDll.dll'



'CallArrayDll.exe':已加载'\ ArrayDll.dll',未加载符号。



'CallArrayDll.exe':已加载'C:\ Windows \ Microsoftoft.NET\Framework\v4.0.30319\clrjit.dll',无法找到或打开PDB文件



'CallArrayDll.exe':已加载'C:\ Windows \SysWOW64 \ odaut32.dll',无法找到或打开PDB文件



'CallArrayDll.exe':加载'C:\ Windows \SysWOW64 \\'ole32.dll',无法找到或打开PDB文件



'CallArrayDll.exe':已加载'C:\ Windows \ Microsoftoft.NET\Framework\v4.0.30319\diasymreader.dll',无法找到或打开PDB文件



CallArrayDll.exe中0x75c8c42d的第一次机会异常:Microsoft C ++异常:内存位置为0x0020f4fc的EEException ..



CallArrayDll.exe中0x75c8c42d的异常异常:0xE0434 352:0xe0434352。



'CallArrayDll.exe':已加载'C:\ Windows \SysWOW64 \ dbghelp.dll',无法找到或打开PDB文件



'CallArrayDll.exe':加载'C:\ Windows \SysWOW64 \ clbcatq.dll',无法找到或打开PDB文件



线程'Win32 Thread'(0x5d4c)退出代码3(0x3)。



线程'Win32线程'(0x3944)已经退出代码3(0x3)。



线程'Win32 Thread'(0x59fc)退出代码3(0x3)。 />


程序'[24492] CallArrayDll.exe:Native'已经退出代码3(0x3)。







使用此代码创建C Dll:

  int  Get1DArray( int  Stress []){
压力[ 0 ] = 0 ;压力[ 1 ] = 1 ;压力[ 2 ] = 2 ;
压力[ 3 ] = 3 ;压力[ 4 ] = 4 ;压力[ 5 ] = 5 ;
return 压力[ 5 ];
}



并使用上面的Fortran Code调用它工作正常!!所以我猜问题是在C#方面。



请帮我解决问题。

解决方案

< blockquote> ATTRIBUTES DLLIMPORT :: Get1DArray
USE,intrinsic :: iso_c_binding
INTEGER(c_int),intent( in ):: Stress( 6
INTEGER(c_int):: ret
END FUNCTION
END INTERFACE
END MODULE MYEXTERNALS


PROGRAM CallArray
USE MYEXTERNALS
IMPLICIT NONE
INTEGER(c_int)::压力( 6
PRINT *,' 1DArray =',Get1DArray(压力)
PAUSE
END PROGRAM CallArray



调试后我得到以下输出:



'CallArrayDll.exe':已加载' \\cifs\cluster\Home\ca416444 \ WinDocuments \ Masterarbeit\C#Dllexport \ to Fortran \1DArray2 \ CallArrayDll \Debug CallArrayDll.exe',符号已加载。



'CallArrayDll.exe':已加载'C:\ Windows \SysWOW64 \ antdll.dll',找不到或打开PDB文件



'CallArrayDll.exe':加载'C:\ Windows \SysWOW64 \ kernel32.dll',无法找到或打开PDB文件



'CallArrayDll.exe':加载'C:\ Windows \SysWOW64 \ KernelBase.dll',无法找到或打开PDB文件



'CallArrayDll.exe':已加载'\\cifs \cluster \Home \ca416444 \ WinDocuments \Masterarbeit \C#Dllexport \ to Fortran \ 1DArray2 \CallArrayDll \Debug \ ArrayDll.dll',符号文件中没有原生符号。



'CallArrayDll.exe':已加载'C:\ Windows \ SysWOW64\mscoree.dll',找不到或打开PDB文件



'CallArrayDll.exe':已加载'C:\ Windows \ SysWOW64 \\ \\ imagehlp.dll',不能找到或打开PDB文件



'CallArrayDll.exe':加载'C:\ Windows \SysWOW64 \ msvcrt.dll',找不到或打开PDB文件



'CallArrayDll.exe':加载'C:\ Windows \SysWOW64 \ _advapi32.dll',无法找到或打开PDB文件



'CallArrayDll.exe':已加载'C:\ Windows \SysWOW64 \sechost.dll',无法找到或打开PDB文件



'CallArrayDll.exe':已加载'C:\ Windows \SysWOW64 \rpcrt4.dll',无法找到或打开PDB文件



'CallArrayDll.exe':已加载'C:\ Windows \SysWOW64 \sspicli.dll',无法找到或打开PDB文件



'CallArrayDll.exe':已加载'C:\ Windows \SysWOW64 \ cryptbase.dll',无法找到或打开PDB文件



'CallArrayDll .exe':已加载'C:\ Windows \ Microsoft.NET.NET \ Framework \v4.0.30319 \\ mscoreei.dll',无法找到或打开PDB文件



'CallArrayDll.exe':已加载'C:\ Windows \SysWOW64 \shlwapi.dll' ,无法找到或打开PDB文件



'CallArrayDll.exe':已加载'C:\ Windows \SysWOW64 \ gdi32.dll',找不到或者打开PDB文件



'CallArrayDll.exe':加载'C:\ Windows \SysWOW64 \ user32.dll',无法找到或打开PDB文件



'CallArrayDll.exe':加载'C:\ Windows \SysWOW64 \ lpk.dll',无法找到或打开PDB文件



'CallArrayDll.exe':加载'C:\ Windows \SysWOW64 \ uspp.dll',无法找到或打开PDB文件



'CallArrayDll.exe':已加载'C:\ Windows \SysWOW64 \ imm32.dll',无法找到或打开PDB文件



'CallArrayDll.exe':加载'C:\ Windows \SysWOW64 \ msctf.dll',不能找到或打开PDB文件



'CallArrayDll.exe':已加载'C:\ Windows \ Microsoft \\ .NET \ Framework \v4.0.30319 \ clr.dll',无法找到或打开PDB文件



'CallArrayDll.exe':已加载'C:\ Windows \SysWOW64 \msvcr110_clr0400.dll' ,无法找到或打开PDB文件



CallArrayDll.exe中0x75c8c42d的第一次机会异常:0x04242420:0x4242420。



'CallArrayDll.exe':已加载'C:\ Windows \assembly\NativeImages_v4.0.30319_32\mscorlib\ce5f61c5754789df97be8dc991c47d07 \mscorlib.ni.dll',无法找到或打开PDB文件< br $>


'CallArrayDll.exe':已加载'\ ArrayDll.dll',未加载符号。



'CallArrayDll.exe':已卸载'\ ArrayDll.dll'



'CallArrayDll.exe':已加载'\ ArrayDll.dll',未加载符号。



'CallArrayDll。 exe':已加载'C:\ Windows \ Microsoftoft.NET\Framework\v4.0.30319\clrjit.dll',无法找到或打开PDB文件



'CallArrayDll.exe':已加载'C:\ Windows \SysWOW64 \ odaut32.dll',无法找到或打开PDB文件



' CallArrayDll.exe':已加载'C:\ Windows \SysWOW64 \\'ole32.dll',无法找到或打开PDB文件



'CallArrayDll.exe' :已加载'C:\ Windows \ Mesrosoft.NET \ Framework\v4.0.30319 \diasymreader.dll',无法找到或打开PDB文件



CallArrayDll.exe中0x75c8c42d的第一次机会异常:Microsoft C ++异常:内存位置为0x0020f4fc的EEException ..



CallArrayDll.exe中0x75c8c42d的第一次机会异常: 0xE0434352:0xe0434352。



'CallArrayDll.exe':已加载'C:\ Windows \SysWOW64 \ dbghelp.dll',无法找到或打开PDB文件


'CallArrayDll.exe':已加载'C:\ Windows \SysWOW64 \ clbcatq.dll',无法找到或打开PDB文件



线程'Win32 Thread'(0x5d4c)退出代码3(0x3)。



线程'Win32 Thread'( 0x3944)退出代码3(0x3)。



线程'Win32 Thread'(0x59fc)退出代码3(0x3)。



程序'[24492] CallArrayDll.exe:Native'退出代码3(0x3)。







使用此代码创建C Dll:

  int  Get1DArray( int 压力[]){
压力[ 0 ] = < span class =code-digit> 0 ;压力[ 1 ] = 1 ;压力[ 2 ] = 2 ;
压力[ 3 ] = 3 ;压力[ 4 ] = 4 ;压力[ 5 ] = 5 ;
return 压力[ 5 ];
}



并使用上面的Fortran Code调用它工作正常!!所以我想问题出在C#方面。



请帮我解决问题。


不应该是 SizeConst = 6



  public   static   int  Get1DArray([MarshalAs(UnmanagedType.LPArray,SizeConst =  6 )]  int  []压力)





如果这不是问题,如果你必须在你的项目中继续前进,你可以做一个丑陋的解决方法。

如果你没有很多您需要更改的类似方法。



 使用系统; 
使用 System.Text;
使用 RGiesecke.DllExport;
使用 System.Runtime.InteropServices;

命名空间 Testme
{
class 测试
{
[DllExport( Get1DArray,CallingConvention = CallingConvention.Cdecl)]
public static int Get1DArray ( int stress1, int stress2, int stress3, int stress4, int stress5, int stress6)

{

压力[ 0 ] = stress1;
压力[ 1 ] = stress2;
压力[ 2 ] = stress3;
压力[ 3 ] = stress4;
压力[ 4 ] = stress5;
压力[ 5 ] = stress6;

return 压力[ 5 ];
}

}
}





这很难看,但它会最多可能会工作。


Hello,

I try to pass an 1D-array from a C#-DLL to Fortran. For that I am using R. Giesecke DllExport. That makes my managed DLL to a unmanaged DLL with a .lib file. To pass a normal parameter works well. Please see here: https://software.intel.com/en-us/forums/topic/517631
The 1D-Array has always the size of 6! The size of the array will never change only the assigned value.

Here my Code in C#:

using System;
using System.Text;
using RGiesecke.DllExport;
using System.Runtime.InteropServices;

namespace Testme
{
    class Test
    {
        [DllExport("Get1DArray", CallingConvention = CallingConvention.Cdecl)]
        public static int Get1DArray([MarshalAs(UnmanagedType.LPArray, SizeConst = 5)] int[] Stress)
            
        {
           
            Stress [0] = 0;
            Stress [1] = 1;
            Stress [2] = 2;
            Stress [3] = 3;
            Stress [4] = 4;
            Stress [5] = 5; 

            return Stress[5];
        }

    }
}


And my Fortran Code:

MODULE MYEXTERNALS
USE iso_c_binding
INTERFACE
FUNCTION Get1DArray(Stress) RESULT(ret) bind(c, name="Get1DArray")
!DEC$ATTRIBUTES DLLIMPORT :: Get1DArray
USE, intrinsic :: iso_c_binding
INTEGER(c_int), intent(in) :: Stress(6)
INTEGER(c_int) :: ret
END FUNCTION
END INTERFACE
END MODULE MYEXTERNALS


PROGRAM CallArray
USE MYEXTERNALS
IMPLICIT NONE
INTEGER(c_int) :: Stress(6)
PRINT*, '1DArray =', Get1DArray(Stress)
PAUSE
END PROGRAM CallArray


After debugging I get following output:

'CallArrayDll.exe': Loaded '\\cifs\cluster\Home\ca416444\WinDocuments\Masterarbeit\C# Dllexport\to Fortran\1DArray2\CallArrayDll\Debug\CallArrayDll.exe', Symbols loaded.

'CallArrayDll.exe': Loaded 'C:\Windows\SysWOW64\ntdll.dll', Cannot find or open the PDB file

'CallArrayDll.exe': Loaded 'C:\Windows\SysWOW64\kernel32.dll', Cannot find or open the PDB file

'CallArrayDll.exe': Loaded 'C:\Windows\SysWOW64\KernelBase.dll', Cannot find or open the PDB file

'CallArrayDll.exe': Loaded '\\cifs\cluster\Home\ca416444\WinDocuments\Masterarbeit\C# Dllexport\to Fortran\1DArray2\CallArrayDll\Debug\ArrayDll.dll', No native symbols in symbol file.

'CallArrayDll.exe': Loaded 'C:\Windows\SysWOW64\mscoree.dll', Cannot find or open the PDB file

'CallArrayDll.exe': Loaded 'C:\Windows\SysWOW64\imagehlp.dll', Cannot find or open the PDB file

'CallArrayDll.exe': Loaded 'C:\Windows\SysWOW64\msvcrt.dll', Cannot find or open the PDB file

'CallArrayDll.exe': Loaded 'C:\Windows\SysWOW64\advapi32.dll', Cannot find or open the PDB file

'CallArrayDll.exe': Loaded 'C:\Windows\SysWOW64\sechost.dll', Cannot find or open the PDB file

'CallArrayDll.exe': Loaded 'C:\Windows\SysWOW64\rpcrt4.dll', Cannot find or open the PDB file

'CallArrayDll.exe': Loaded 'C:\Windows\SysWOW64\sspicli.dll', Cannot find or open the PDB file

'CallArrayDll.exe': Loaded 'C:\Windows\SysWOW64\cryptbase.dll', Cannot find or open the PDB file

'CallArrayDll.exe': Loaded 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscoreei.dll', Cannot find or open the PDB file

'CallArrayDll.exe': Loaded 'C:\Windows\SysWOW64\shlwapi.dll', Cannot find or open the PDB file

'CallArrayDll.exe': Loaded 'C:\Windows\SysWOW64\gdi32.dll', Cannot find or open the PDB file

'CallArrayDll.exe': Loaded 'C:\Windows\SysWOW64\user32.dll', Cannot find or open the PDB file

'CallArrayDll.exe': Loaded 'C:\Windows\SysWOW64\lpk.dll', Cannot find or open the PDB file

'CallArrayDll.exe': Loaded 'C:\Windows\SysWOW64\usp10.dll', Cannot find or open the PDB file

'CallArrayDll.exe': Loaded 'C:\Windows\SysWOW64\imm32.dll', Cannot find or open the PDB file

'CallArrayDll.exe': Loaded 'C:\Windows\SysWOW64\msctf.dll', Cannot find or open the PDB file

'CallArrayDll.exe': Loaded 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll', Cannot find or open the PDB file

'CallArrayDll.exe': Loaded 'C:\Windows\SysWOW64\msvcr110_clr0400.dll', Cannot find or open the PDB file

First-chance exception at 0x75c8c42d in CallArrayDll.exe: 0x04242420: 0x4242420.

'CallArrayDll.exe': Loaded 'C:\Windows\assembly\NativeImages_v4.0.30319_32\mscorlib\ce5f61c5754789df97be8dc991c47d07\mscorlib.ni.dll', Cannot find or open the PDB file

'CallArrayDll.exe': Loaded '\ArrayDll.dll', No symbols loaded.

'CallArrayDll.exe': Unloaded '\ArrayDll.dll'

'CallArrayDll.exe': Loaded '\ArrayDll.dll', No symbols loaded.

'CallArrayDll.exe': Loaded 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\clrjit.dll', Cannot find or open the PDB file

'CallArrayDll.exe': Loaded 'C:\Windows\SysWOW64\oleaut32.dll', Cannot find or open the PDB file

'CallArrayDll.exe': Loaded 'C:\Windows\SysWOW64\ole32.dll', Cannot find or open the PDB file

'CallArrayDll.exe': Loaded 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\diasymreader.dll', Cannot find or open the PDB file

First-chance exception at 0x75c8c42d in CallArrayDll.exe: Microsoft C++ exception: EEException at memory location 0x0020f4fc..

First-chance exception at 0x75c8c42d in CallArrayDll.exe: 0xE0434352: 0xe0434352.

'CallArrayDll.exe': Loaded 'C:\Windows\SysWOW64\dbghelp.dll', Cannot find or open the PDB file

'CallArrayDll.exe': Loaded 'C:\Windows\SysWOW64\clbcatq.dll', Cannot find or open the PDB file

The thread 'Win32 Thread' (0x5d4c) has exited with code 3 (0x3).

The thread 'Win32 Thread' (0x3944) has exited with code 3 (0x3).

The thread 'Win32 Thread' (0x59fc) has exited with code 3 (0x3).

The program '[24492] CallArrayDll.exe: Native' has exited with code 3 (0x3).



To Create a C Dll with this Code:

int Get1DArray(int Stress[]){
   Stress[0]=0; Stress[1]=1; Stress[2]=2;
   Stress[3]=3; Stress[4]=4; Stress[5]=5;
   return Stress[5];
   }


and call it with the Fortran Code above works fine!! So i guess the problem is on the C# side.

Please help me to fix the problem.

解决方案

ATTRIBUTES DLLIMPORT :: Get1DArray USE, intrinsic :: iso_c_binding INTEGER(c_int), intent(in) :: Stress(6) INTEGER(c_int) :: ret END FUNCTION END INTERFACE END MODULE MYEXTERNALS PROGRAM CallArray USE MYEXTERNALS IMPLICIT NONE INTEGER(c_int) :: Stress(6) PRINT*, '1DArray =', Get1DArray(Stress) PAUSE END PROGRAM CallArray


After debugging I get following output:

'CallArrayDll.exe': Loaded '\\cifs\cluster\Home\ca416444\WinDocuments\Masterarbeit\C# Dllexport\to Fortran\1DArray2\CallArrayDll\Debug\CallArrayDll.exe', Symbols loaded.

'CallArrayDll.exe': Loaded 'C:\Windows\SysWOW64\ntdll.dll', Cannot find or open the PDB file

'CallArrayDll.exe': Loaded 'C:\Windows\SysWOW64\kernel32.dll', Cannot find or open the PDB file

'CallArrayDll.exe': Loaded 'C:\Windows\SysWOW64\KernelBase.dll', Cannot find or open the PDB file

'CallArrayDll.exe': Loaded '\\cifs\cluster\Home\ca416444\WinDocuments\Masterarbeit\C# Dllexport\to Fortran\1DArray2\CallArrayDll\Debug\ArrayDll.dll', No native symbols in symbol file.

'CallArrayDll.exe': Loaded 'C:\Windows\SysWOW64\mscoree.dll', Cannot find or open the PDB file

'CallArrayDll.exe': Loaded 'C:\Windows\SysWOW64\imagehlp.dll', Cannot find or open the PDB file

'CallArrayDll.exe': Loaded 'C:\Windows\SysWOW64\msvcrt.dll', Cannot find or open the PDB file

'CallArrayDll.exe': Loaded 'C:\Windows\SysWOW64\advapi32.dll', Cannot find or open the PDB file

'CallArrayDll.exe': Loaded 'C:\Windows\SysWOW64\sechost.dll', Cannot find or open the PDB file

'CallArrayDll.exe': Loaded 'C:\Windows\SysWOW64\rpcrt4.dll', Cannot find or open the PDB file

'CallArrayDll.exe': Loaded 'C:\Windows\SysWOW64\sspicli.dll', Cannot find or open the PDB file

'CallArrayDll.exe': Loaded 'C:\Windows\SysWOW64\cryptbase.dll', Cannot find or open the PDB file

'CallArrayDll.exe': Loaded 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscoreei.dll', Cannot find or open the PDB file

'CallArrayDll.exe': Loaded 'C:\Windows\SysWOW64\shlwapi.dll', Cannot find or open the PDB file

'CallArrayDll.exe': Loaded 'C:\Windows\SysWOW64\gdi32.dll', Cannot find or open the PDB file

'CallArrayDll.exe': Loaded 'C:\Windows\SysWOW64\user32.dll', Cannot find or open the PDB file

'CallArrayDll.exe': Loaded 'C:\Windows\SysWOW64\lpk.dll', Cannot find or open the PDB file

'CallArrayDll.exe': Loaded 'C:\Windows\SysWOW64\usp10.dll', Cannot find or open the PDB file

'CallArrayDll.exe': Loaded 'C:\Windows\SysWOW64\imm32.dll', Cannot find or open the PDB file

'CallArrayDll.exe': Loaded 'C:\Windows\SysWOW64\msctf.dll', Cannot find or open the PDB file

'CallArrayDll.exe': Loaded 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll', Cannot find or open the PDB file

'CallArrayDll.exe': Loaded 'C:\Windows\SysWOW64\msvcr110_clr0400.dll', Cannot find or open the PDB file

First-chance exception at 0x75c8c42d in CallArrayDll.exe: 0x04242420: 0x4242420.

'CallArrayDll.exe': Loaded 'C:\Windows\assembly\NativeImages_v4.0.30319_32\mscorlib\ce5f61c5754789df97be8dc991c47d07\mscorlib.ni.dll', Cannot find or open the PDB file

'CallArrayDll.exe': Loaded '\ArrayDll.dll', No symbols loaded.

'CallArrayDll.exe': Unloaded '\ArrayDll.dll'

'CallArrayDll.exe': Loaded '\ArrayDll.dll', No symbols loaded.

'CallArrayDll.exe': Loaded 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\clrjit.dll', Cannot find or open the PDB file

'CallArrayDll.exe': Loaded 'C:\Windows\SysWOW64\oleaut32.dll', Cannot find or open the PDB file

'CallArrayDll.exe': Loaded 'C:\Windows\SysWOW64\ole32.dll', Cannot find or open the PDB file

'CallArrayDll.exe': Loaded 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\diasymreader.dll', Cannot find or open the PDB file

First-chance exception at 0x75c8c42d in CallArrayDll.exe: Microsoft C++ exception: EEException at memory location 0x0020f4fc..

First-chance exception at 0x75c8c42d in CallArrayDll.exe: 0xE0434352: 0xe0434352.

'CallArrayDll.exe': Loaded 'C:\Windows\SysWOW64\dbghelp.dll', Cannot find or open the PDB file

'CallArrayDll.exe': Loaded 'C:\Windows\SysWOW64\clbcatq.dll', Cannot find or open the PDB file

The thread 'Win32 Thread' (0x5d4c) has exited with code 3 (0x3).

The thread 'Win32 Thread' (0x3944) has exited with code 3 (0x3).

The thread 'Win32 Thread' (0x59fc) has exited with code 3 (0x3).

The program '[24492] CallArrayDll.exe: Native' has exited with code 3 (0x3).



To Create a C Dll with this Code:

int Get1DArray(int Stress[]){
   Stress[0]=0; Stress[1]=1; Stress[2]=2;
   Stress[3]=3; Stress[4]=4; Stress[5]=5;
   return Stress[5];
   }


and call it with the Fortran Code above works fine!! So i guess the problem is on the C# side.

Please help me to fix the problem.


Shouldn't it be SizeConst = 6?

public static int Get1DArray([MarshalAs(UnmanagedType.LPArray, SizeConst = 6)] int[] Stress)



If that is not the problem, you can do an ugly workaround if you have to move forward in your project.
It will work if you don't have a lot of similar methods that you need to change.

using System;
using System.Text;
using RGiesecke.DllExport;
using System.Runtime.InteropServices;

namespace Testme
{
    class Test
    {
        [DllExport("Get1DArray", CallingConvention = CallingConvention.Cdecl)]
        public static int Get1DArray(int stress1, int stress2, int stress3, int stress4, int stress5, int stress6)

        {

            Stress [0] = stress1;
            Stress [1] = stress2;
            Stress [2] = stress3;
            Stress [3] = stress4;
            Stress [4] = stress5;
            Stress [5] = stress6;

            return Stress[5];
        }

    }
}



It is ugly, but it will most likely work.


这篇关于将C#Array传递给Fortran的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆