我现在要用C#调用一个C++的dll
C++dll源码为: /** DBReader_getDocumentByID 通过ID号读取Docuemnt
*
* @param ID
* @return Document 成功
NULL 失败
*/
DBReader_DLL const char * DBReader_getDocumentByID(int ID);我的C#中:[DllImport("DBReader", EntryPoint = "DBReader_getDocumentByID", SetLastError = true,
CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern String DBReader_getDocumentByID(int ID);
但是当我执行如下代码时,程序出错:for (int i = 0; i < number; i++)
{
MessageBox.Show(DBReader.DBReader_getDocumentByID(i).ToString());
}
错误报告是:尝试读取或写入受保护的内存。这通常指示其他内存已损坏
如果,我将C#改为:: public static extern byte[] DBReader_getDocumentByID(int ID);
则错误报告是:return value错误。请大家帮我看看是怎么回事,谢谢!
C++dll源码为: /** DBReader_getDocumentByID 通过ID号读取Docuemnt
*
* @param ID
* @return Document 成功
NULL 失败
*/
DBReader_DLL const char * DBReader_getDocumentByID(int ID);我的C#中:[DllImport("DBReader", EntryPoint = "DBReader_getDocumentByID", SetLastError = true,
CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern String DBReader_getDocumentByID(int ID);
但是当我执行如下代码时,程序出错:for (int i = 0; i < number; i++)
{
MessageBox.Show(DBReader.DBReader_getDocumentByID(i).ToString());
}
错误报告是:尝试读取或写入受保护的内存。这通常指示其他内存已损坏
如果,我将C#改为:: public static extern byte[] DBReader_getDocumentByID(int ID);
则错误报告是:return value错误。请大家帮我看看是怎么回事,谢谢!
解决方案 »
- {D5DEA129-C130-4268-A3AB-14CED69E052D}是个什么组件?
- 子线程 发送数据 死掉
- 如何获取Column的DbType等的值
- 简单问题 【一小时后结贴】
- 一个ORACLE读取数据速度问题
- Hashtable里面存放struct的内容,怎么遍历去掉相同的纪录?
- 关于DataGride的问题,在winform下希望是其单元格内容相同的合并,找了些资料,但是是在asp下的
- 再问C#中录音的问题,如何直接录成MP3格式的?
- 请教二函数.函数1在一个文件末尾添加固定长度一字符串.函数2读出该字符串.3Q
- ListView里在LargeImageList添加的是Jpeg图像,我想重新设置图像的大小,可是refresh后不能正常显示
- [圣诞,我失去了情人]+索引超出了数组界限
- C#得到最後一個id 的值
string is managed object.So you need use this System.Runtime.InteropServices.Marshal.PtrToStringAnsi method or others
to convert (Marshal) native object to mananged object.