c#調用C++DLL代碼,發現了一個隱藏很深的問題。 危害很大,而且不易察覺。
大概是申明c++的函數時候,有一個long類型的指針。在C#中我的申明成了這樣:
public extern void Method(ref uint para);
uint test = 0;
int *p = new IntPtr();
Method(ref test);
在調用Method這裏下斷點,p的值是分配的一個內存地址。F10跳過Method,p指針就指向了0x00000000!!;初步分析,是在棧上只給test分配了4個字節存放值,