返回 'Attempted to read or write protected memory' 错误的 C# 等效于 VB DLL 函数声明

标签 c# c++ vb.net vba dll

如果我的 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++ 函数,但不断收到“试图读取或写入 protected 内存”错误。

有谁知道我做错了什么? VBA 程序能够正常访问 DLL,但我的 C# 不行。

我按照下面链接中先前提出的问题的格式编写了代码,但一直出现错误。 C# equivalent of VB DLL function declaration (InternetSetOption)?

最佳答案

您的 VB 定义包含您未在 C# P/Invoke 定义中通过引用传递的 ByRef 值。此外,您似乎在 VB6 中传递 double 组而不是 ByRef double 。最后,VB6 long 是 32 位类型,与 C# int 相同。

所以定义应该是:

[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);

关于返回 'Attempted to read or write protected memory' 错误的 C# 等效于 VB DLL 函数声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30984675/

相关文章:

c++ - Mysql C++ 驱动程序-创建后获取准备好的语句查询

android - Android 中使用的 C++ 库的最佳架构

vb.net - DataColumn 的 AutoIncrement 始终返回 False

c# - 在单独的文件夹 .net 中构建引用文件

c++ - 在 .NET 中捕获非托管 dll 异常

c# - 如何将 void 同步方法转换为异步方法?

c# - 防止后退按钮

C#-Monogame.Forms : Question about getting mouse coordinates

c# - 使用 C# 和 WPF 在代码中绘制线条

c++ - 为什么在特殊成员函数中将 r 值绑定(bind)到 const 左值引用是非法的?