标题:c#调用c++ dll 文件 报错:尝试读取或写入受保护的内存。这通常指示其他内存 ...
只看楼主
z909562139
Rank: 2
等 级:论坛游民
帖 子:32
专家分:87
注 册:2012-11-5
结帖率:75%
 问题点数:0 回复次数:1 
c#调用c++ dll 文件 报错:尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
求高人指点,谢谢!
c++
HANDLE CreatCaptureThread (void)
{
    DWORD nID = 0;
    HANDLE hThread = CreateThread (NULL,0,ThreadProc,NULL,0,&nID);
    if (hThread == NULL)
        printf ("创建线程失败\n");
    return hThread;
}

/*
用这个函数,获取数据包的指针
*/
void* GetPacketPtr()
{
    void* packet;
    WaitForSingleObject(SignalMutex,INFINITE);
    if(EndPtr == FrontPtr)
        packet=NULL;
    else {
        packet=Classbuffer[EndPtr];
        EndPtr++;
    }
    ReleaseMutex(SignalMutex);
return packet;
}
UINT16 GetChannel (void* ptr){

    return 0x00000000;
}

c#
[DllImport("ParselDll.dll", EntryPoint = "CreatCaptureThread")]
        public extern static IntPtr CreatCaptureThread();


        [DllImport("ParselDll.dll", EntryPoint = "GetPacketPtr")]
        public extern static IntPtr GetPacketPtr();

        [DllImport("ParselDll.dll", CharSet = CharSet.Ansi, EntryPoint = "GetMacFrameCtrl")]
        public extern static UInt16 GetMacFrameCtrl(IntPtr ptr);


            IntPtr ptr = DLL.CreatCaptureThread();
            if (ptr == null)
            {
                MessageBox.Show("线程启动失败");
            }
            else
            {
                IntPtr ptrStr = DLL.GetPacketPtr();
                UInt16 i = DLL.GetMacFrameCtrl(ptrStr);
                MessageBox.Show(i.ToString());

            }

c++文件不是我写的,这样调用运行报错:尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
dll动态库放在启动项目的bin\Debug下




搜索更多相关主题的帖子: void 内存 return 数据包 
2012-11-15 15:15
z909562139
Rank: 2
等 级:论坛游民
帖 子:32
专家分:87
注 册:2012-11-5
得分:0 
等待中。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
2012-11-15 17:01



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-387147-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.336705 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved