c#调用c++的DLL方法,提示“出现尝试读取或写入受保护的内存。这通常指示其他内存已损坏”

是个IC读卡器读卡号的c++的demo,下面粘贴代码:

void CCTabOpration::OnRead() 
{
    CString strSer = pReader->GetCardStrSerial();
    OutputDebugString(strSer);
    //pMem->SetWindowText("\n"+strSer);
}

CString CAceReader::GetCardStrSerial()
{
    CString strre;
    BYTE buf[10];
    BYTE snr[16];
    GET_SNR(hComm, DeviceAddress, 0x26, 0x00, snr,buf);
    strre.Format("%02x%02x%02x%02x",buf[0],buf[1],buf[2],buf[3]);
    return strre;
}

然后粘贴我写道c#端的代码,先写了个类,然后点击按钮调用该方法:

    class Class1
    {
        [DllImport("mi.dll", EntryPoint = "GET_SNR", SetLastError = true,
                CharSet = CharSet.Auto, ExactSpelling = false,
                CallingConvention = CallingConvention.StdCall)]
        public static extern int GET_SNR(IntPtr  commHandle,
                        int DeviceAddress, 
                        byte mode,
                        byte RDM_halt,
                        byte[] snr, 
                        byte[] value);

    }
        按钮方法:
                private void button1_Click(object sender, EventArgs e)
        {
            IntPtr hComm = IntPtr.Zero;

            byte[] a = new byte[128];
            byte[] b = new byte[16];
            byte aa = 0x26;
            byte bb = 0x00;
            Class1.GET_SNR(hComm, 0, aa, bb, b, a); //GET_SNR方法的前两个参数的值是在c++中打断点知道的前俩参数都是0           
            Console.WriteLine(a[1]);   

        }

然后就报错了,就是调方法的那一行,错误日志:
未处理System.AccessViolationException
_HResult=-2147467261
_message=尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
HResult=-2147467261
IsTransient=false
Message=尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
Source=WindowsFormsApplication14
StackTrace:
在 WindowsFormsApplication14.Class1.GET_SNR(IntPtr commHandle, Int32 DeviceAddress, Byte mode, Byte RDM_halt, Byte[] snr, Byte[] value)
在 WindowsFormsApplication14.Form1.button1_Click(Object sender, EventArgs e) 位置 c:\123\WindowsFormsApplication14\WindowsFormsApplication14\Form1.cs:行号 28
在 System.Windows.Forms.Control.OnClick(EventArgs e)
在 System.Windows.Forms.Button.OnClick(EventArgs e)
在 System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
在 System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
在 System.Windows.Forms.Control.WndProc(Message& m)
在 System.Windows.Forms.ButtonBase.WndProc(Message& m)
在 System.Windows.Forms.Button.WndProc(Message& m)
在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
在 System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
在 System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
在 System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
在 System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
在 System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
在 System.Windows.Forms.Application.Run(Form mainForm)
在 WindowsFormsApplication14.Program.Main() 位置 c:\123\WindowsFormsApplication14\WindowsFormsApplication14\Program.cs:行号 19
在 System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
在 System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
在 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
在 System.Threading.ThreadHelper.ThreadStart_Context(Object state)
在 System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
在 System.Threading.ThreadHelper.ThreadStart()
InnerException:

1个回答

你调用的类存放位置不对.或者是不是C#封装的类

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Python+OpenCV计算机视觉

Python+OpenCV计算机视觉

c#调用c++的dll出现尝试读取或写入受保护的内存问题

使用c#调用c++的一个dll。c++的接口函数为: ``` extern "C" __declspec(dllexport)bool __stdcall CreateDetmObject(IDetManager **ppDetManager); ``` 参数IDetManager为一个结构体: ``` struct IDetManager { virtual void __stdcall SetListener(HWND hWnd) = 0; virtual bool __stdcall OpenDetector(const char *strIniFile) = 0; virtual bool __stdcall CloseDetector() = 0; } ``` 在c#端对接口函数和结构体重新定义如下: ``` [DllImport(DllName)] public extern static bool CreateDetmObject(ref IDetManager ppDetManager); [StructLayout(LayoutKind.Sequential)] public class IDetManager { public IntPtr SetListener; public IntPtr OpenDetector; public IntPtr CloseDetector; } ``` c#调用代码如下: ``` Tzb.CInterface.IDetManager iDetManager = new Tzb.CInterface.IDetManager(); CInterface.CreateDetmObject(ref iDetManager); Func<bool> closeDetector = (Func<bool>)Marshal.GetDelegateForFunctionPointer(iDetManager.CloseDetector, typeof(Func<bool>)); closeDetector(); ``` 但每次运行到CInterface.CreateDetmObject(ref iDetManager);时,程序崩溃,提示错误: “System.AccessViolationException”类型的未经处理的异常出现在 Tzb.exe 中。 其他信息: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。 不知是我的c#代码哪里出了错误,希望大家可以多多帮助。

c#调用c++的dll 尝试读取或写入受保护的内存……

编译了一个c语言的lib,然后用c++去调用这个lib,调用成功,没有异常,然后又把c++中调用c语言lib的函数导出成dll,调用成功,参数传递也没问题,但当运行到c++的dll函数中时报错:”尝试读取或写入受保护的内存,这通常指示其他内存已损坏”,下面是出错的代码: ssh_session session = ssh_new(); ssh_connect(session); 运行到connect时报错,其中ssh_session是c语言lib中的结构体,ssh_connect是c语言lib的函数,求大神指教!

c#调用c++的DLL方法,提示“出现尝试读取或写入受保护的内存。这通常指示其他内存已损坏”

是个IC读卡器读卡号的c++的demo,下面粘贴代码: ``` void CCTabOpration::OnRead() { CString strSer = pReader->GetCardStrSerial(); OutputDebugString(strSer); //pMem->SetWindowText("\n"+strSer); } CString CAceReader::GetCardStrSerial() { CString strre; BYTE buf[10]; BYTE snr[16]; GET_SNR(hComm, DeviceAddress, 0x26, 0x00, snr,buf); strre.Format("%02x%02x%02x%02x",buf[0],buf[1],buf[2],buf[3]); return strre; } ``` 然后粘贴我写道c#端的代码,先写了个类,然后点击按钮调用该方法: ``` class Class1 { [DllImport("mi.dll", EntryPoint = "GET_SNR", SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.StdCall)] public static extern int GET_SNR(IntPtr commHandle, int DeviceAddress, byte mode, byte RDM_halt, byte[] snr, byte[] value); } 按钮方法: private void button1_Click(object sender, EventArgs e) { IntPtr hComm = IntPtr.Zero; byte[] a = new byte[128]; byte[] b = new byte[16]; byte aa = 0x26; byte bb = 0x00; Class1.GET_SNR(hComm, 0, aa, bb, b, a); //GET_SNR方法的前两个参数的值是在c++中打断点知道的前俩参数都是0 Console.WriteLine(a[1]); } ``` 然后就报错了,就是调方法的那一行,错误日志: 未处理System.AccessViolationException _HResult=-2147467261 _message=尝试读取或写入受保护的内存。这通常指示其他内存已损坏。 HResult=-2147467261 IsTransient=false Message=尝试读取或写入受保护的内存。这通常指示其他内存已损坏。 Source=WindowsFormsApplication14 StackTrace: 在 WindowsFormsApplication14.Class1.GET_SNR(IntPtr commHandle, Int32 DeviceAddress, Byte mode, Byte RDM_halt, Byte[] snr, Byte[] value) 在 WindowsFormsApplication14.Form1.button1_Click(Object sender, EventArgs e) 位置 c:\123\WindowsFormsApplication14\WindowsFormsApplication14\Form1.cs:行号 28 在 System.Windows.Forms.Control.OnClick(EventArgs e) 在 System.Windows.Forms.Button.OnClick(EventArgs e) 在 System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent) 在 System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) 在 System.Windows.Forms.Control.WndProc(Message& m) 在 System.Windows.Forms.ButtonBase.WndProc(Message& m) 在 System.Windows.Forms.Button.WndProc(Message& m) 在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) 在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) 在 System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) 在 System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg) 在 System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData) 在 System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context) 在 System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) 在 System.Windows.Forms.Application.Run(Form mainForm) 在 WindowsFormsApplication14.Program.Main() 位置 c:\123\WindowsFormsApplication14\WindowsFormsApplication14\Program.cs:行号 19 在 System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) 在 System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) 在 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 在 System.Threading.ThreadHelper.ThreadStart_Context(Object state) 在 System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 在 System.Threading.ThreadHelper.ThreadStart() InnerException:

c#调用delphi编写的dll文件报错,尝试读取或写入受保护的内存

delphi函数原型 Procedure invoke(params :PChar; result : PChar) ;

C# 调用C++ dll是出现这样的错误“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。

调试时是这样的: ![图片说明](https://img-ask.csdn.net/upload/201510/08/1444298886_462387.png) SDK上是这样说明的: ![图片说明](https://img-ask.csdn.net/upload/201510/08/1444298904_364645.png) 我调用这个dll时是这样的: ![图片说明](https://img-ask.csdn.net/upload/201510/08/1444298984_220155.png) 困扰了很久,希望有大神来看一看,感激不敬

尝试读取或写入受保护的内存 错误

c#调用第三方DLL,在32位系统下运行正常,64位下报错“尝试读取或写入受保护的内存”

尝试读取或写入受保护的内存。这通常指示其他内存已损坏

c#调用别人的dll里面的方法出现"尝试读取或写入受保护的内存。这通常指示其他内存已损坏。"!纠结了好久!请大家帮帮我吧

C# Winform项目中, 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。

C/C++ 代码,这个是第三方提供的外部方法(调用“华大HD-900身份证阅读器接口函数”): int HD_Read_BaseInfo(char* pBmpData, char *pName, char *pSex, char *pNation, char *pBirth, char *pAddress, char *pCertNo, char *pDepartment, char *pEffectData, char *pExpire); 我在C#中调用该方法,HD_Read_BaseInfo方法第一次调用正常,第二次调用提示"尝试读取或写入受保护的内存。这通常指示其他内存已损坏。" [DllImport("HDstdapi.dll")] public static extern int HD_Read_BaseInfo(string pBmpData, string pName, string pSex, string pNation, string pBirth, string pAddress, string pCertNo, string pDepartment, string pEffectData, string pExpire); 附调用代码: int init_result = 1000; init_result = HD_InitComm(1001); //初始化连接 if (init_result == 0) { int auth_result = 1000; auth_result= HD_Authenticate(); //卡认证 if (auth_result == 0) { try { int red_result = 1000; //读卡操作,报"尝试读取或写入受保护的内存。这通常指示其他内存已损坏。"错误。 red_result = HD_Read_BaseInfo(null, null, null, null, null, null, null, null, null, null); } catch(Exception ex) { MessageBox.Show("form1====" + ex.Message); } } CHDNetSDK.HD_CloseComm(); 请各位帮忙看看,谢谢!

尝试读取或写入受保护的内存,这通常指示其他内存已损坏

![图片](https://img-ask.csdn.net/upload/201703/04/1488607959_64562.jpg)![图片](https://img-ask.csdn.net/upload/201703/04/1488608211_50402.jpg)

C#调用DLL结构体,第一次成功,第二次的时候就报错。尝试读取或写入受保护的内存。

C++代码 typedef struct tagIDCardData{ char Name[32]; //姓名 char Sex[6]; //性别 char Nation[20]; //名族 char Born[18]; //出生日期 char Address[72]; //住址 char IDCardNo[38]; //身份证号 char GrantDept[32]; //发证机关 char UserLifeBegin[18]; // 有效开始日期 char UserLifeEnd[18]; // 有效截止日期 char reserved[38]; // 保留 char PhotoFileName[255];// 照片路径 }IDCardData; int _stdcall Syn_ReadMsg( int iPort,int iIfOpen,IDCardData *pIDCardData ); C#代码 [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)] public struct IDCardData { [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] public string Name; //姓名 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 6)] public string Sex; //性别 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)] public string Nation; //名族 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 18)] public string Born; //出生日期 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 72)] public string Address; //住址 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 38)] public string IDCardNo; //身份证号 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] public string GrantDept; //发证机关 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 18)] public string UserLifeBegin; // 有效开始日期 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 18)] public string UserLifeEnd; // 有效截止日期 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 38)] public string reserved; // 保留 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 255)] public string PhotoFileName; // 照片路径 } [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_ReadMsg", CharSet = CharSet.Ansi)] public static extern int Syn_ReadMsg(int iPortID, int iIfOpen, ref IDCardData pIDCardData); 应用代码 public int nRet=0;pulblic int nPort=1001;private void ListenCard() { try { while (!_bListenCardQuit) { IDCardData CardMsg = new IDCardData(); nRet = Syn_ReadMsg(nPort, 0, ref CardMsg);//读取信息 GC.Collect(2, GCCollectionMode.Optimized); Thread.Sleep(500); } _bQuitListenCardDone = true; #region 异常 catch (Exception eE) { } #endregion } 运行到这里( nRet = Syn_ReadMsg(nPort, 0, ref CardMsg);//读取信息),第一次成功,运行第二次的时候就报错:出现尝试读取或写入受保护的内存。这通常指示其他内存已损坏! 恳请各位大牛帮忙解决一下问题啊!

C#调用Delphi dll文件问题

最近手头一个项目,需要用到C#调用Delphi写出的dll文件(调用的是modelDLL.dll,但是该dll文件还需要另外一个borlndmm.dll文件支持,调用的时候已经把这两个dll文件放到debug目录下了),直接附上相关代码: Delphi相关源码: ``` type TCharStr=array[0..599] of char; ``` 用Delphi写的直接调用可运行,代码如下: ``` procedure TMainDLLForm.PedBitBtnClick(Sender: TObject); var fileName:TCharStr; begin OpenDataFileDlg.InitialDir:= GetCurrentDir; OpenDataFileDlg.Title:='加载模型文件'; OpenDataFileDlg.Filter := '定量模型[*.mdl]|*.mdl|定性模型[*.mdr]|*.mdr'; if OpenDataFileDlg.Execute then begin StrPCopy(FileName,OpenDataFileDlg.FileName); tmpD:=NIRSAModelForPred(graphyData,dataLength,FileName,targetName); end; if compareText(fileExt,'.MDR')=0 then begin memo1.Lines.Add('定性模型: '+ExtractFileName(FileName)); memo1.Lines.Add(Format('预测结果: %10s:%0.0f',[targetName,tmpD])); end; memo1.Lines.Add('--------------'); memo1.Lines.Add(trim(NIRSAPretreatInfor(FileName)));//调用该函数 memo1.Lines.Add('--------------'); memo1.Lines.Add(trim(NIRSAModelInfor(FileName))); end; ``` 而我现在用C#调用出现"尝试读取或写入受保护的内存。这通常指示其他内存已损坏"的错误,代码如下所示: ``` [MarshalAs(UnmanagedType.LPStr, SizeConst = 600)] public string fileName; [DllImport(@"modelDLL.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] [return: MarshalAs(UnmanagedType.LPStr, SizeConst = 600)] public static extern string NIRSAPretreatInfor(ref string fileName); private void preCalcButton_Click(object sender, EventArgs e) { OpenFileDialog dialog = new OpenFileDialog(); dialog.Multiselect = false; if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) { fileName = dialog.FileName; string result = NIRSAPretreatInfor(ref fileName); modelInfoTextBox.Text = result; } } ``` 该段代码主要参考Stack Overflow的一些解决方案,地址:[链接](https://stackoverflow.com/questions/5105460/delphi-dll-in-c-sharp-var-array-as-parameter ""),现在解决不了,没有C币了,请大神支支招,谢谢!

C# 写的form程序 调试时突然出先“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”

前几天写的一个程序,今天准备用了,当打开exe文件的时候突然停止,然后进入vs2012调试报错,在数据库链接那个块的打开数据库(看图片![图片说明](https://img-ask.csdn.net/upload/201507/24/1437720598_873995.png)),不知道怎么回事。昨天是用还好着呢,还有将exe文件 放到别人的电脑上就可以是用!求各路大神给个觉解方法吧!急急急啊! 还有个问题,所有链接数据库的方法都抱着个错!

C#调用C程序dll的内存问题

项目需要:实现C#调用C语言写的的算法,该C程序需要封装成dll。C程序本身可以跑通没有任何问题,随即写了一个C#demo来调用该算法。报如下图的错误 ![图片说明](https://img-ask.csdn.net/upload/201801/01/1514778145_545365.png) 由于测试阶段,所以该C程序没有参数接口,所以排除网上一些帖子说的参数类型不匹配的原因。 进入dll内部进行调试,报如下错误 ![图片说明](https://img-ask.csdn.net/upload/201801/01/1514778352_126183.png) 经调试发现是第二块内存continental_47_grid分配失败导致的上图错误,第一块aodgrid分配正常。 ![图片说明](https://img-ask.csdn.net/upload/201801/01/1514778387_739926.png) 但如果手动把分配内存大小调小可以分配成功。如此看来是内存空间不够的问题导致的,但是C程序本身运行没有出现过这样的问题。难道是dll本事有内存限制机制? 卡了很多天了,还望各路大神帮忙看看 一下是C#调用代码: public static class NativeMethod { [DllImport("kernel32.dll", EntryPoint = "LoadLibrary")] public static extern int LoadLibrary( [MarshalAs(UnmanagedType.LPStr)] string lpLibFileName); [DllImport("kernel32.dll", EntryPoint = "GetProcAddress")] public static extern IntPtr GetProcAddress(int hModule, [MarshalAs(UnmanagedType.LPStr)] string lpProcName); [DllImport("kernel32.dll", EntryPoint = "FreeLibrary")] public static extern bool FreeLibrary(int hModule); } static int Main(string[] args) { int hModule = NativeMethod.LoadLibrary("AHI_AOD_noarg.dll"); if (hModule == 0) return 1; IntPtr intPtr = NativeMethod.GetProcAddress(hModule, "AHI"); AHI AHI = (AHI)Marshal.GetDelegateForFunctionPointer(intPtr, typeof(AHI)); AHI(); return 0; } } }

尝试读取或写入受保护的内存。这通常指示其他内存已损坏。

![图片说明](https://img-ask.csdn.net/upload/202006/11/1591871344_490965.png) C#调用C++的DLL时候发生的错误,求解答

C# 引用C++ dll的奇怪问题,相当奇怪

项目是做视频监控的,外购的高清摄像头,并提供了C++的dll,项目使用C#做管理平台。 其中dll中有个函数 **VCAInitSdk** 做初始化用的,即每次打开管理程序,都要调用这个初始化函数。 起初,在WinForm中调用该函数,都可以正常的执行。 当这个函数在 **windows service 和控制台应用程序** 中运行后报错:【尝试读取或写入受保护的内存。这通常指示其他内存已损坏】 **也就是说,这个函数在winform中可以使用,但是在windows service和控制台应用中却使用不了。** 在winform中,该函数式在Load事件中运行,而服务,是在OnStart中运行,控制台则是在Main函数中运行。 是否是因为主线程和子线程的原因的。我在winform Load中, **新开一个线程** 来运行这个函数,发现也报错,其错误跟windows service和控制台的错误是一样的,我就想,是不是其他2个都是在子线程上运行的这个函数呢。如果是这样,那么我在windows service中该怎么做,如果不是这样,还请赐教!

C#的程序调用C++的dll时出现错误

出现“System.AccessViolationException”类型的未经处理的异常在 UserDll.exe 中发生 其他信息: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。错误 ![图片说明](https://img-ask.csdn.net/upload/201809/28/1538101947_17239.png) 这是我遇到的问题, C#的代码 ![图片说明](https://img-ask.csdn.net/upload/201809/28/1538102005_30472.png) C++的函数方法![图片说明](https://img-ask.csdn.net/upload/201809/28/1538102301_831206.png)

C# 调用C 的dll参数为回调函数

C# 调用C 的dll参数为回调函数 C 代码: ``` typedef void (*LP_GET)(unsigned char *buf) ; typedef unsigned char (*LP_UARTA_INIT)(unsigned char no, int baudrate, LP_GET GetFun) ; ``` C# 代码: ``` public delegate void LP_GET(byte[] buf); public static extern char UARTA_Init(char no, int baudrate, LP_GET getFun); LP_GET lpGet = new LP_GET(LP_GET_GetFun); UARTA_Init('1', 2, lpGet); ``` 在C#我用委托,但是会报错,信息:尝试读取或写入受保护的内存。这通常指示其他内存已损坏。我觉得是不是参数类型不对啊。

C#调用C++DLL结构体指针传参问题,求大神现身指导,在线等!!!

c++方法: ``` extern "C" _declspec(dllexport) bool GetKE(string CaseId, string CaseText, string &CaseReason, SS *KeList,int &nLen_KeList); ``` c++结构体: ``` typedef struct BriefKE { string KeName; string KeValue; }SS; ``` C#结构体: ``` [StructLayout(LayoutKind.Sequential,CharSet=CharSet.Ansi,Pack=1)] public struct BriefKE { [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)] public string KeName; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)] public string KeValue; } ``` C#函数: ``` [DllImport("KnowledgeExtract.dll", EntryPoint = "GetKE")] [return: MarshalAs(UnmanagedType.Bool)] public unsafe static extern bool GetKE(StringBuilder CaseId, StringBuilder CaseText, ref StringBuilder CaseReason, BriefKE[] infos, ref int nLen_KeList); ``` C#调用: ``` //结构体数组指针初始化 SS[] KeList = new SS[20]; for (int i = 0; i < KeList.Length; i++) { KeList[i] = new SS(); } IntPtr[] ptArray = new IntPtr[1]; ptArray[0] = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(SS)) * 20); IntPtr pt = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(SS))); Marshal.Copy(ptArray, 0, pt, 1); //其他几个参数初始化省略 if (!test.GetKE(caseId, caseText, ref caseReason, infos, ref len)) { Console.WriteLine("读取失败"); Console.ReadLine(); } ``` 总是报下面这个错,请大神给写一个C#调用的例子 ``` “System.AccessViolationException”类型的未经处理的异常在 未知模块。 中发生 其他信息: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。 ```

c# 程序调用外部dll文件对采集模块进行读写,不定时出现以下错误

问题签名: 问题事件名称: BEX 应用程序名: NangGang11.20.vshost.exe 应用程序版本: 9.0.21022.8 应用程序时间戳: 47316898 故障模块名称: MSVCR80.dll 故障模块版本: 8.0.50727.6195 故障模块时间戳: 4dcddbf3 异常偏移: 00008aa0 异常代码: c000000d 异常数据: 00000000

2019 Python开发者日-培训

2019 Python开发者日-培训

150讲轻松搞定Python网络爬虫

150讲轻松搞定Python网络爬虫

设计模式(JAVA语言实现)--20种设计模式附带源码

设计模式(JAVA语言实现)--20种设计模式附带源码

YOLOv3目标检测实战:训练自己的数据集

YOLOv3目标检测实战:训练自己的数据集

java后台+微信小程序 实现完整的点餐系统

java后台+微信小程序 实现完整的点餐系统

三个项目玩转深度学习(附1G源码)

三个项目玩转深度学习(附1G源码)

初级玩转Linux+Ubuntu(嵌入式开发基础课程)

初级玩转Linux+Ubuntu(嵌入式开发基础课程)

2019 AI开发者大会

2019 AI开发者大会

玩转Linux:常用命令实例指南

玩转Linux:常用命令实例指南

一学即懂的计算机视觉(第一季)

一学即懂的计算机视觉(第一季)

4小时玩转微信小程序——基础入门与微信支付实战

4小时玩转微信小程序——基础入门与微信支付实战

Git 实用技巧

Git 实用技巧

Python数据清洗实战入门

Python数据清洗实战入门

使用TensorFlow+keras快速构建图像分类模型

使用TensorFlow+keras快速构建图像分类模型

实用主义学Python(小白也容易上手的Python实用案例)

实用主义学Python(小白也容易上手的Python实用案例)

程序员的算法通关课:知己知彼(第一季)

程序员的算法通关课:知己知彼(第一季)

MySQL数据库从入门到实战应用

MySQL数据库从入门到实战应用

机器学习初学者必会的案例精讲

机器学习初学者必会的案例精讲

手把手实现Java图书管理系统(附源码)

手把手实现Java图书管理系统(附源码)

极简JAVA学习营第四期(报名以后加助教微信:eduxy-1)

极简JAVA学习营第四期(报名以后加助教微信:eduxy-1)

.net core快速开发框架

.net core快速开发框架

玩转Python-Python3基础入门

玩转Python-Python3基础入门

Python数据挖掘简易入门

Python数据挖掘简易入门

微信公众平台开发入门

微信公众平台开发入门

程序员的兼职技能课

程序员的兼职技能课

Windows版YOLOv4目标检测实战:训练自己的数据集

Windows版YOLOv4目标检测实战:训练自己的数据集

HoloLens2开发入门教程

HoloLens2开发入门教程

微信小程序开发实战

微信小程序开发实战

Java8零基础入门视频教程

Java8零基础入门视频教程

Python可以这样学(第一季:Python内功修炼)

Python可以这样学(第一季:Python内功修炼)

相关热词 c# 按行txt c#怎么扫条形码 c#打包html c# 实现刷新数据 c# 两个自定义控件重叠 c#浮点类型计算 c#.net 中文乱码 c# 时间排序 c# 必备书籍 c#异步网络通信
立即提问