1. 不返回值的参数
C++ 原型:
bool SendNewSms(char *szTel, char *szMessage);
C#引用;
-
[
DllImport( "CdmaCard.dll",EntryPoint="SendNewSms")]
-
public static extern bool SendNewSms(string phone,string msg);
C++原型:
BOOL GetCardErrorMessage(char *szErrorMessage , int errorCode);
C#引用
-
[
DllImport( "CdmaCard.dll",EntryPoint="GetCardErrorMessage")]
-
public static extern int GetCardErrorMessage(StringBuilder msg,int errorCode);
-
-
StringBuilder buf =
new StringBuilder(
1024);
//指定的Buf大小必须大于可能的最大长度
-
GetCardErrorMessage(buf,
1);
C++原型:
BOOL GetSmsSaveStation (int *nSmsStation);
-
[
DllImport( "CdmaCard.dll",EntryPoint="GetSmsSaveStation")]
-
public static extern bool GetSmsSaveStation(ref int nStation);
C++原型:
-
struct NET_INFO_STRUCT
-
{
-
DWORD nDurationTime;
//持续时间
-
double nReceiveByte;
//接收字节
-
double nSendByte;
//发送字节
-
};
-
BOOL NetGetConnectDetail(NET_INFO_STRUCT *lpNetInfo);
-
public
struct NET_INFO_STRUCT
-
{
-
public
uint nDurationTime;
//持续时间
-
public
double nReceiveByte;
//接收字节
-
public
double nSendByte;
//发送字节
-
}
-
[
DllImport( "CdmaCard.dll",EntryPoint="NetGetConnectDetail")]
-
public static extern int NetGetConnectDetail(ref NET_INFO_STRUCT pNetInfo);
-
-
NET_INFO_STRUCT netInfo =
new NET_INFO_STRUCT();
-
NetGetConnectDetail(
ref netInfo);
-
struct UIM_BOOK_STRUCT
-
{
-
int UimIndex;
-
char szName[
15];
-
char szPhone[
21];
-
};
-
int ReadUimAllBook(UIM_BOOK_STRUCT lpUimBookItem[],int nMaxArraySize);
-
[
StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
//可以指定编码类型
-
public
struct UIM_BOOK_STRUCT
-
{
-
public
int UimIndex;
-
[
MarshalAs(UnmanagedType.ByValTStr, SizeConst= 15)]
-
public
string szName;
-
[
MarshalAs(UnmanagedType.ByValTStr, SizeConst= 21)]
-
public
string szPhone;
-
};
-
[
DllImport( "CdmaCard.dll",EntryPoint="ReadUimAllBook")]
-
public static extern int ReadUimAllBook([Out] UIM_BOOK_STRUCT [] lpUimBookItem,int nMaxArraySize);
-
UIM_BOOK_STRUCT[] p =
new UIM_BOOK_STRUCT[
20];
-
int ret = ReadUimAllBook(p,p.Length);
6. 注意问题
类型不一致,会导致调用失败,
(1) long 类型,在C++中是4字节的整数,在C#中是8字节的整数;
(2) 字符串类型的设置不正确;
以下是几个简单的window调用
-
[
System.Security.SuppressUnmanagedCodeSecurity]
// We won't use this maliciously
-
[
DllImport("User32.dll", CharSet=CharSet.Auto)]
-
public static extern bool ScreenToClient(IntPtr hWnd, ref System.Drawing.Point rect);
-
-
[
System.Security.SuppressUnmanagedCodeSecurity]
// We won't use this maliciously
-
[
DllImport("User32.dll", CharSet=CharSet.Auto)]
-
public static extern bool GetWindowRect(IntPtr hWnd, out System.Drawing.Rectangle rect);
-
-
[
System.Security.SuppressUnmanagedCodeSecurity]
// We won't use this maliciously
-
[
DllImport("User32.dll", CharSet=CharSet.Auto)]
-
public static extern bool UnregisterClass([MarshalAs(UnmanagedType.LPTStr)] string className, IntPtr instanceHandle);