结构体数组非托管到托管

ken_flash 2008-07-16 12:12:26
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);
...全文
246 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ken_flash 2008-07-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 gomoku 的回复:]
CDC *pDCis one of the problems.

You need to chang your c++ code.
[/Quote]

C++ CODE 不是我写的,我是直接引用DLL的...用gethdc不行么
kbryant 2008-07-16
  • 打赏
  • 举报
回复
友情帮顶
gomoku 2008-07-16
  • 打赏
  • 举报
回复
CDC *pDC is one of the problems.

You need to chang your c++ code.
ken_flash 2008-07-16
  • 打赏
  • 举报
回复
谢谢大家

谢谢gomoku

上午已经重新封装了部分DLL了

C++不精通做的比较慢

散分了
gomoku 2008-07-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ken_flash 的回复:]
引用 1 楼 gomoku 的回复:
CDC *pDCis one of the problems.
You need to chang your c++ code.


C++ CODE 不是我写的,我是直接引用DLL的...用gethdc不行么
[/Quote]

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。
soaringbird 2008-07-16
  • 打赏
  • 举报
回复
CDC类在C井里没有对应的类型
lenxwd 2008-07-16
  • 打赏
  • 举报
回复
楼主意思好像不是在C#里怎么使用C++的DLL吧?
C#的方法不也是可以直接将数组作为参数?
yagebu1983 2008-07-16
  • 打赏
  • 举报
回复
C++不懂哦!!!
关注!!
zhnzzy 2008-07-16
  • 打赏
  • 举报
回复

[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);
ken_flash 2008-07-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 kbryant 的回复:]
友情帮顶
[/Quote]

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧