C#调用非托管DLL(VC) 内存异常

C#调用非托管DLL(VC) 内存错误
非托管调用Dll D1, D1又去调用DLL D2, 提示尝试读取或写入受保护的内存的错误,通过写日志发现是D1调用D2出现的错误,
但是在VC下调用时正常的。 

求解!!!!!

------解决方案--------------------
D1 函数的代码和 C# 声明的方法和调用代码 能否贴出来看下
------解决方案--------------------
具体执行到哪个函数出的错,函数里做了什么
------解决方案--------------------
楼主应该给个调用哪个函数出的错吧。

------解决方案--------------------
vc写的dll有个毛病,就是错误的代码通常都可以执行,所以报错的地方通常不是写错的地方,你发现“D1调用D2出现的错误”其实用处不大,因为可能错的地方在前面,

一般是参数错,
------解决方案--------------------
是你在把非托管的代码,如C++封装好的API函数在C#中用DllImport中引入的时候 声明该函数有错误!

IRP_RAStartRealAudio()函数:
{
WRITE_LOG(LOG_LEVEL_HIGHEST, "CIRealAudio::StartRealAudio(%08X, IO:%d)", this, m_bStartIO);
 if (m_bStartIO)
 {
 return IDIR_FALSE;
 }
 WRITE_LOG(LOG_LEVEL_HIGHEST, "CIRealAudio::IDEC_OpenAudioPlayer1(%08X)", &m_lAudioPlayer);
 IDEC_OpenAudioPlayer(NULL, &m_lAudioPlayer);
 WRITE_LOG(LOG_LEVEL_HIGHEST, "CIRealAudio::IDEC_OpenAudioPlayer2(%08X)", &m_lAudioPlayer);
}

IDEC_OpenAudioPlayer(NULL, &m_lAudioPlayer)这里执行出错
这个函数中有一个变量 &m_lAudioPlayer 在这个函数里面可定是没声明的把,在你的C++里面应该是全局变量,可是如果就用C#来调用而已,这个变量是不可能定义的,所以错误应该就在这个参数上!