我现在的dll里的函数声明为TCHAR * test(TCHAR *param)
{
TCHAR * result = new TCHAR[64];
//...
return result;
}
这样在dll里new一个字符串,然后返回给C#,可是C#调用这个函数以后,出错:
"0x75b58f09" 指令引用的 "0x00200140" 内存。该内存不能为 "read"。
我猜c#可能试图释放result,结果导致了问题。
请问该如何正确返回一个字符串呢?
最好还能正确释放,没有内存泄露。
{
TCHAR * result = new TCHAR[64];
//...
return result;
}
这样在dll里new一个字符串,然后返回给C#,可是C#调用这个函数以后,出错:
"0x75b58f09" 指令引用的 "0x00200140" 内存。该内存不能为 "read"。
我猜c#可能试图释放result,结果导致了问题。
请问该如何正确返回一个字符串呢?
最好还能正确释放,没有内存泄露。
解决方案 »
- c#如何使用钩子禁用系统win键,和任务管理器、alt+f4热键?
- From中的保存设置怎么弄啊
- 关于取时间差距的问题!
- 关于WinForm中的treeview和链表的问题
- 求Datatable与string[]之间的转换代码
- C#中能动态生成菜单吗?
- 在DataGrid中的一个TemplateColumn中加入了一个DropDownList,请问怎么在.cs中文件对它进行Bind??
- 如何取得ListView中选中行的某一列的值?
- 悬赏: 怎样知道哪个服务在占用CPU????
- C#“英文”资料,已编译的chm格式,网上的信息大部分是假的,这里直接提供本人网站的链接,快来下载!!!
- 问个小白问题
- C#词汇的编译,请高手帮忙
我只能猜测是因为C#不能释放vc在dll里new的char啊
vc在dll怎么看待这个string呢?看作申请好的char数组?
// ** Documentation for Win32 GetShortPathName() API Function
// DWORD GetShortPathName(
// LPCTSTR lpszLongPath, // file for which to get short path
// LPTSTR lpszShortPath, // short path name (output)
// DWORD cchBuffer // size of output buffer
// );[DllImport("Kernel32", CharSet = CharSet.Auto)]
static extern Int32 GetShortPathName(
String path, // input string
StringBuilder shortPath, // output string
Int32 shortPathLength); // StringBuilder.Capacity
感觉好像是vc里用单例模式创建了一个对象,然后在C#中试图释放的时候除了问题.....