当前位置:编程学习 > C#/ASP.NET >>

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

这个是c++写的函数const char* DownLoadFile(char* a, char* b)
如果用c#调用DllImport应该怎么写?主要是类型要正确,
我之前写的运行期一直报错,方法如下
[DllImport("assemble.dll")]
public static extern StringBuilder DownLoadFile(string a,string b);
请求大家的帮助,谢谢 --------------------编程问答-------------------- 报什么错,是不是对应的文件没有找到,或者下载文件的存放路径未找到? --------------------编程问答-------------------- string
--------------------编程问答-------------------- 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 

--------------------编程问答-------------------- 报的错误为:尝试读取或写入受保护的内存。这通常指示其他内存已损坏 --------------------编程问答-------------------- 返回值用byte*吧 --------------------编程问答--------------------
引用楼主 dubin1003 的回复:
char* DownLoadFile(char* a, char* b) const;


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

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

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

补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,