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#