c#调用c++dll时const char*类型应该怎么对应

devin--- 2009-11-16 12:13:07
这个是c++写的函数const char* DownLoadFile(char* a, char* b)
如果用c#调用DllImport应该怎么写?主要是类型要正确,
我之前写的运行期一直报错,方法如下
[DllImport("assemble.dll")]
public static extern StringBuilder DownLoadFile(string a,string b);
请求大家的帮助,谢谢
...全文
1527 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
devin--- 2009-11-16
  • 打赏
  • 举报
回复
报的错误为:尝试读取或写入受保护的内存。这通常指示其他内存已损坏
lzsh0622 2009-11-16
  • 打赏
  • 举报
回复
C++ C#
=====================================
WORD ushort
DWORD uint
UCHAR int/byte 大部分情况都可以使用int代替,而如果需要严格对齐的话则应该用bytebyte
UCHAR* string/IntPtr
unsigned char* [MarshalAs(UnmanagedType.LPArray)]byte[]/?(Intptr)
char* string
LPCTSTR string
LPTSTR [MarshalAs(UnmanagedType.LPTStr)] string
long int
ulong uint
Handle IntPtr
HWND IntPtr
void* IntPtr
int int
int* ref int
*int IntPtr
unsigned int uint
COLORREF uint

lzsh0622 2009-11-16
  • 打赏
  • 举报
回复
string
qldsrx 2009-11-16
  • 打赏
  • 举报
回复
报什么错,是不是对应的文件没有找到,或者下载文件的存放路径未找到?
gomoku 2009-11-16
  • 打赏
  • 举报
回复
[Quote=引用楼主 dubin1003 的回复:]
char* DownLoadFile(char* a, char* b) const;
[/Quote]

这是个不好的导出函数的例子。返回的字符串不清楚是如何释放的,而且声明const后似乎调用方也不能释放。

如果不关心内存泄露,那你可以用:
[DllImport("assemble.dll")]
public static extern IntPtr DownLoadFile(string a,string b);

然后用Marshal.PtrToStringAnsi(IntPtr result)来得到返回字符串。

soaringbird 2009-11-16
  • 打赏
  • 举报
回复
返回值用byte*吧

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧