如何用C#调用这个C++dll的函数

extern "C" PB_RESULT __declspec(dllexport)CRDR_ReadData(OUT char* lpBuffer, IN DWORD dwBufferSize,
OUT DWORD lpNumberOfBytesRead)
{
WriteLog4("[CRDR_ReadData]dwBufferSize=%d",dwBufferSize);
if (m_crdr.m_ptrarrayCardInfo.GetSize()>0)
{
CARD_INFO *pCardInfo = NULL;
pCardInfo = (CARD_INFO
)m_crdr.m_ptrarrayCardInfo.GetAt(0);
int nLenth = strlen(pCardInfo->cardno)+1;
//DWORD dLen = nLenth + 1;
memcpy(lpBuffer,pCardInfo->cardno,nLenth);
*lpNumberOfBytesRead = nLenth-1;
if (pCardInfo != NULL)
delete pCardInfo;
m_crdr.m_ptrarrayCardInfo.RemoveAt(0);
WriteLog4("[CRDR_ReadData]lpBuffer=%s,nLenth=%d",lpBuffer,*lpNumberOfBytesRead);
}

return PB_OK;
}

P/Invoke C++ Interop

http://www.cnblogs.com/kevin-top/archive/2010/06/04/1751425.html

谢谢大家!

我现在就是不知道“OUT char* lpBuffer” 应该怎么定义,我使用StringBuilder、String、byte都会闪退,当使用IntPtr可以执行成功,但是从C++中写不进去数据。

第一个参数用IntPtr,然后利用Marshal.AllocHGlobal()分配,最后释放Marshal.FreeHGlobal()