C++中的一个函数,
第一个参数是个结构体数组.
原C++程序在用的时候就是新建一个数组直接传进来,并不是传指针.我在C#中怎么用托管来表示呢?这个试半天了没搞定//C++函数如下
//VOID WINAPI PaintInView(
//sPnt pntTypeArray[],
//int arrSize,
//CDC *pDC,
//int rcWidth,
//int rcHeight,
//double central_x,
//double central_y,
//int level=0,
//enPTIVflag ptivflag=PTIV_R2PSMP);
第一个参数是个结构体数组.
原C++程序在用的时候就是新建一个数组直接传进来,并不是传指针.我在C#中怎么用托管来表示呢?这个试半天了没搞定//C++函数如下
//VOID WINAPI PaintInView(
//sPnt pntTypeArray[],
//int arrSize,
//CDC *pDC,
//int rcWidth,
//int rcHeight,
//double central_x,
//double central_y,
//int level=0,
//enPTIVflag ptivflag=PTIV_R2PSMP);
C++ CODE 不是我写的,我是直接引用DLL的...用gethdc不行么
[DllImport("XXdll")
private static extern //VOID WINAPI PaintInView(
//sPnt pntTypeArray[],
//int arrSize,
//CDC *pDC,
//int rcWidth,
//int rcHeight,
//double central_x,
//double central_y,
//int level=0,
//enPTIVflag ptivflag=PTIV_R2PSMP);
C#的方法不也是可以直接将数组作为参数?
HDC是一个句柄,而CDC是一个MFC类,他们的内存布局完全不一样。
CDC的偏移量0应该是vtable指针,你传一个HDC(即GetHdc拿到的IntPtr)给C++,C++调用该CDC的任何虚函数的时候,都是不可预料的野指针调用。
你可以自己做一下实验,看看i和j是否相同: CDC dc;
int i = (int)&dc;
int j = (int)&dc.m_hDC;
能修改C++的话,使用HDC而不用CDC。
不能修改C++的话,或许可以再写一个c++ Dll,你的C#程序调用该Dll并传入HDC,该Dll Attach HDC到一个CDC,然后再调用你不能修改的dll。