用.net调用非托管dll出现错误:尝试读取或写入受保护的内存。这通常指示其他内存已损坏。c#和vb.net都试过 代码如下: 声明:
[DllImport("refprop.dll", CharSet = CharSet.Auto)]
public static extern unsafe void SETUPdll(int i, string hfld, string hfmix, string hrf, double ierr, string herr, int ln1, int ln2, int ln3, int ln4); 调用: int i, nc = 1;
hfld="nitrogen.fld";
hfmix="hmx.bnc";
hrf="DEF";
int ierr=0; SETUPdll(nc, hfld, hfmix, hrf, ierr, herr, 10000, 255, 3, 255); 运行到这就报错上面的内存错误。 但是我在vb6.0调用的时候 完全没问题。 vb6.0的代码: 声明:
Public Declare Sub SETUPdll Lib "REFPROP.DLL" (i As Long, ByVal hfld As String, ByVal hfmix As String, ByVal hrf As String, ierr As Long, ByVal herr As String, ln1 As Long, ln2 As Long, ln3 As Long, ln4 As Long) 调用: Sub Example()
Dim i As Integer
nc = 1
hfld = "nitrogen.fld" hfmix = "hmx.bnc"
hrf = "DEF"
Call SETUPdll(nc, hfld, hfmix, hrf, ierr, herr, 10000&, 255&, 3&, 255&) end sub
请高人解答,多谢了。
[DllImport("refprop.dll", CharSet = CharSet.Auto)]
public static extern unsafe void SETUPdll(int i, string hfld, string hfmix, string hrf, double ierr, string herr, int ln1, int ln2, int ln3, int ln4); 调用: int i, nc = 1;
hfld="nitrogen.fld";
hfmix="hmx.bnc";
hrf="DEF";
int ierr=0; SETUPdll(nc, hfld, hfmix, hrf, ierr, herr, 10000, 255, 3, 255); 运行到这就报错上面的内存错误。 但是我在vb6.0调用的时候 完全没问题。 vb6.0的代码: 声明:
Public Declare Sub SETUPdll Lib "REFPROP.DLL" (i As Long, ByVal hfld As String, ByVal hfmix As String, ByVal hrf As String, ierr As Long, ByVal herr As String, ln1 As Long, ln2 As Long, ln3 As Long, ln4 As Long) 调用: Sub Example()
Dim i As Integer
nc = 1
hfld = "nitrogen.fld" hfmix = "hmx.bnc"
hrf = "DEF"
Call SETUPdll(nc, hfld, hfmix, hrf, ierr, herr, 10000&, 255&, 3&, 255&) end sub
请高人解答,多谢了。
试着修改一下签名看看,把VB里为doube的对应C#下改为double看看。
typedef void (__stdcall *fp_SETUPdllTYPE)(long &,char*,char*,char*,long &,char*,long ,long ,long ,long );
代码如下:声明:
[DllImport("refprop.dll", CharSet = CharSet.Auto)]
public static extern unsafe void SETUPdll(ref int i, string hfld, string hfmix, string hrf, ref int ierr, string herr, int ln1, int ln2, int ln3, int ln4); 调用:
int ierr=0, nc = 1;
hfld="nitrogen.fld";
hfmix="hmx.bnc";
hrf="DEF";SETUPdll(ref nc, hfld, hfmix, hrf, ref ierr, herr, 10000, 255, 3, 255);