积极答复者
[已解决]求一个C#调用C++的函数的方法

问题
-
pfile,result,pcut还是获取不到值,我把现在的完整代码帖一次,高手们看看有没有错
要求,4个参数都要获得返回值
_declspec(dllexport) char* Test(char* pfile,RECT* rect,char* result,BYTE *pcut)
{
rect->left=pcut[55500];
rect->right=20;
rect->top=30;
rect->bottom=40;
pcut[0]=100;
pcut[1]=200;
pcut[2]=300;
pcut[3]=400;
pcut[4]=500;
pcut[5]=600;
pcut[6]=700;
pcut[7]=800;
pcut[8]=900;
pcut[9]=110;
result="abcdef";
pfile ="test";
return "0";
}
C#的:
public static extern string Test(ref string pfile, ref Rectangle rect,ref string result, [MarshalAs(UnmanagedType.LPArray, SizeConst = 10)] byte[] pcut);- 已编辑 卡卡超人 2009年8月20日 3:32 已解决
答案
-
C/C++
C#
Int, Long
int
Int *
Ref int
LPCSTR, const char *
[MarshalAs(UnmanagedType.LPSTR)]
string
LPCTSTR, const TCHAR *
[MarshalAs(UnmanagedType.LPTSTR)]
string
LPSTR, char *
[MarshalAs(UnmanagedType.LPSTR)]
stringBuilder
LPTSTR, TCHAR *
[MarshalAs(UnmanagedType.LPTSTR)]
stringBuilder
Byte [n] str
[MarshalAs(UnmanagedType.LPArray)]
byte[]str
WORD
uInt16
Byte, unsigned char
byte
Short
Int16
float
single
double
double
DWORD, unsigned long, Ulong
[MarshalAs(UnmanagedType.U4)]
UInt32
bool
bool
HANDLE, LPDWORD, LPVOID, void*
IntPtr
NULL pointer
IntPtr.Zero
你参考一下
family as water- 已标记为答案 KeFang Chen 2009年8月20日 5:50
- 取消答案标记 KeFang Chen 2009年8月20日 5:50
- 已标记为答案 肖小勇Moderator 2009年8月24日 0:56
-
用stringbuilder返回字符串
Please mark the post answered your question as the answer, and mark other helpful posts as helpful.
Visual C++ MVP- 已标记为答案 肖小勇Moderator 2009年8月24日 0:56
全部回复
-
用stringbuilder返回字符串
Please mark the post answered your question as the answer, and mark other helpful posts as helpful.
Visual C++ MVP- 已标记为答案 肖小勇Moderator 2009年8月24日 0:56
-
C/C++
C#
Int, Long
int
Int *
Ref int
LPCSTR, const char *
[MarshalAs(UnmanagedType.LPSTR)]
string
LPCTSTR, const TCHAR *
[MarshalAs(UnmanagedType.LPTSTR)]
string
LPSTR, char *
[MarshalAs(UnmanagedType.LPSTR)]
stringBuilder
LPTSTR, TCHAR *
[MarshalAs(UnmanagedType.LPTSTR)]
stringBuilder
Byte [n] str
[MarshalAs(UnmanagedType.LPArray)]
byte[]str
WORD
uInt16
Byte, unsigned char
byte
Short
Int16
float
single
double
double
DWORD, unsigned long, Ulong
[MarshalAs(UnmanagedType.U4)]
UInt32
bool
bool
HANDLE, LPDWORD, LPVOID, void*
IntPtr
NULL pointer
IntPtr.Zero
你参考一下
family as water- 已标记为答案 KeFang Chen 2009年8月20日 5:50
- 取消答案标记 KeFang Chen 2009年8月20日 5:50
- 已标记为答案 肖小勇Moderator 2009年8月24日 0:56