当前位置:编程学习 > C#/ASP.NET >>

c#中调用c++ dll中遇到棘手的问题

具体需求是这样的 :
我读取一个视频,播放这个视频,然后把这个视频的每一帧交给别人处理(VC处理).
这个视频的播放.暂停.停止是由我这来控制的.我用C#来处理.

然后现在在c#这边,是可以拆出视频的每一帧
拆出来的格式是 IntPtr然后可以转换成MIplImage、Bitmap等格式的

然后c++的这边的话可以接收 Bitmap * 和IplImage* 格式的,函数定义如下
extern "C" __declspec(dllexport) char* __stdcall aaa(Bitmap * bitmap)



或者
extern "C" __declspec(dllexport) char* __stdcall aaa(IplImage* ip)



但是要封装成dll在c#里调用  这样的话这两个类型的都不支持了
 [DllImport("Dlldemo111.dll")] //声明dll里函数
        static extern string shibie(/*这里不能出现指针类型的啊*/);



然后再c++里 主要要获取的信息是 
 BYTE *pBuf = (BYTE*)data.Scan0;
 BYTE *pRGB = (BYTE*)malloc(w * h * 3);



尝试过直接传 pBuf进来 把c++函数修改成这样
extern "C" __declspec(dllexport) char* __stdcall aaa(byte *pBuf,int w,int h)




但是会报错的  
for(int i = 0; i < h; i++)
     memcpy(pRGB + i * w * 3, pBuf + i * nRowBytes, w * 3);

 

这里会报错......
新手,刚上手,不知道把问题描述清楚没有? 还请高手多多指教... c# emgu opencv dll 指针 --------------------编程问答-------------------- C#的大神们,出来冒个泡啊.... --------------------编程问答--------------------  同问,,,,,, --------------------编程问答-------------------- 参数为什么不能是指针类型?c#也有支持指针型参数的啊,如:IntPtr

extern "C" __declspec(dllexport) char* __stdcall aaa(int *test)
{
char *ch=new char(10);
sprintf(ch,"%d",*test);
MessageBox(NULL, TEXT("你好(内容)"), TEXT("对话框(标题)"), MB_OK);
return ch;
}


[DllImport("Dlldemo111.dll",EntryPoint="aaa", CharSet=CharSet.Ansi)]

测试代码:

        static void Main(string[] args)
        {
             int ints = 20;
             IntPtr inp = Marshal.AllocHGlobal(100);
             Marshal.StructureToPtr(ints, inp, true);
             string ss = Marshal.PtrToStringAnsi(ccc(inp));
             Console.WriteLine(ss);
        }

--------------------编程问答-------------------- 漏了:

        [DllImport("testwin32.dll", EntryPoint = "ccc", CharSet = CharSet.Ansi)]
        public static extern IntPtr ccc( IntPtr test);

        static void Main(string[] args)
        {
             int ints = 20;
             IntPtr inp = Marshal.AllocHGlobal(100);
             Marshal.StructureToPtr(ints, inp, true);
             string ss = Marshal.PtrToStringAnsi(ccc(inp));
             Console.WriteLine(ss);
        }
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,