C#等价于VBDLL函数声明,返回';尝试读取或写入受保护的内存';错误
本文关键字:受保护 错误 内存 读取 返回 声明 VBDLL 等价于 函数 | 更新日期: 2023-09-27 17:59:04
如果我的VBA代码是:
Private Declare Function pca Lib "mc.dll" Alias "_pca@40" (ByVal n As Long, ByVal nsim As Long, ByVal nbucket As Long, ByVal percent As Double, ByRef cor As Double, ByRef result As Double, ByRef evalue As Double, ByRef evector As Double, ByRef np As Long) As Long
我的C#代码会是(见下文)吗?
[DllImport("mc.dll", EntryPoint = "_pca@40")]
private static extern long pca(long n, long maxsize, long nbucket, double percent, double[] cor, double[] result, double[] d1, double[] v1, long np);
在Visual studio中,我试图在mc.dll中使用C++函数,但一直收到"试图读取或写入受保护内存"的错误。
有人知道我做错了什么吗?VBA程序可以很好地访问DLL,但我的C#不能。
我遵循了下面链接中先前提问的格式,我写了代码,但一直出现错误。C#等价于VB DLL函数声明(InternetSetOption)?
您的VB定义包含ByRef
值,这些值在C#p/Invoke定义中没有通过引用传递。此外,在VB6中,您似乎正在传递双数组,而不是ByRef双数组。最后,作为一个VB6长度是一个32位类型,这与C#内部相同
因此定义应该是:
[DllImport("mc.dll", EntryPoint = "_pca@40")]
private static extern int pca(int n, int maxsize, int nbucket, double percent, ref double cor, ref double result, ref double d1, ref double v1, ref int np);