用C++写的DLL,接口如下
extern "C" __declspec(dllexport) int GetWaterMark(char *srcfile ,int key, char **watermark)//添加水印
第一个参数是文件名字,第二个参数是密钥,第三个是返回的字符串
这是我写的调用DLL的
[DllImport("DllWatermark.dll", ExactSpelling = false, SetLastError = true, CharSet = CharSet.Ansi)]
//提取水印
public static extern bool GetWaterMark(System.String srcfile2, int key,StringBuilder watermark);
IntPtr p =new IntPtr (256);
GetWaterMark(fullname2, 0,p);
Response.Write("密级为" + p);
说是尝试写出受保护的内存,内存可能损坏。
请问char **在c#怎么调用呢?
GetWaterMark(fullname2, 0, &p);
错误信息:指针和固定大小缓冲区只能在不安全的上下文中使用
行 22:
[DllImport("DllWatermark.dll", ExactSpelling = false, SetLastError = true, CharSet = CharSet.Ansi)]
行 23:
//提取水印
行 24:
public static extern bool GetWaterMark(System.String srcfile2, int key, IntPtr* watermark);
|