c#生成dll其他程序调用,C#dll文件
C Dll接口:
void CplusplusToCsharp(in char * * AgentID,out char * * AgentIP);
C#中的声明:
[DllImport(Example.dll)]
公共静态extern void CplusplusToCsharp(char[]AgentID,byte[]AgentIP);
C#中的调用:
编码编码=编码。违约;
byte[]tAgentID;
byte[]tAgentIP;
string[]代理IP;
tAgentID=新字节[100];
tAgentIP=新字节[100];
CplusplusToCsharp(编码. GetChars(tAgentID),tAgentIP);
AgentIP[i]=encode .GetString(tAgentIP,i*Length,Length);
Win32:
BOOL MessageBeep(UINT uType //声音类型);其中的声音类型为枚举类型中的某一值。
C#:
用户需要自己定义一个枚举类型:
公共枚举BeepType
{
简单哔声=-1,
IconAsterisk=0x00000040,
IconExclamation=0x00000030,
IconHand=0x00000010,
IconQuestion=0x00000020,
Ok=0x00000000,
}
C#中导入该函数:
[DllImport(user32.dll)]
公共静态extern bool消息哔声(哔声类型哔声类型);
C#中调用该函数:
MessageBeep(BeepType .图标问题);
[DllImport(kernel32.dll)]
公共静态外部bool GetSystemPowerStatus(
ref SystemPowerStatus SystemPowerStatus);
C#中调用该函数:
系统电源状态备用能源系统(standby power system的缩写)
….备用能源系统(备用电源系统的缩写)初始化赋值……
GetSystemPowerStatus(ref SPs);
对于字符串的处理分为以下几种情况:
1、字符串常量指针的处理(LPCTSTR),也适应于字符串常量的处理,网中的线类型是不可变的类型。
2、字符串缓冲区的处理(char*),即对于变长字符串的处理,网中StringBuilder可用作缓冲区
Win32:
BOOL GetFile(LPCTSTR lproot路径名);
C#:
函数声明:
[DllImport(kernel32.dll ,CharSet=CharSet .自动)]
静态外部布尔获取文件(
[MarshalAs(UnmanagedType .LPTStr)]
字符串根路径名);
函数调用:
字符串路径名;
获取文件(路径名);
备注:
的用法中的字符集是为了说明自动地调用该函数相关的美国国家标准学会版本或者统一码版本
变长字符串处理:
C#:
函数声明:
[DllImport(kernel32.dll ,CharSet=CharSet .自动)]
公共静态extern int GetShortPathName(
[MarshalAs(UnmanagedType .LPTStr)]
字符串路径,
[MarshalAs(UnmanagedType .LPTStr)]
StringBuilder短路径,
int短路径长度);
函数调用:
StringBuilder短路径=new StringBuilder(80);
int result=GetShortPathName(
@d:\test.jpg ,shortPath,shortPath .容量);
string s=shortPath .ToString();
长日照偏差;
}时区信息,* PTIME时区信息
C#:
[StructLayout(LayoutKind .顺序的,字符集=字符集统一码]
结构时区信息
{
公共(同Internationalorganizations)国际组织偏差;
[MarshalAs(UnmanagedType .ByValTStr,SizeConst=32)]
公共字符串标准名称
系统时间标准日期;
公共(同Internationalorganizations)国际组织标准偏差;
[MarshalAs(UnmanagedType .ByValTStr,SizeConst=32)]
公共字符串日光名称
系统时间日光日期;
公共室内采光偏差;
}
HWINSTA hwinsta,//窗口实例的句柄
DESKTOPENUMPROC lpEnumFunc,//回调函数
LPARAM lParam //用于回调函数的值
);
回调函数桌面菜单的声明:
布尔回调EnumDesktopProc(
LPTSTR lpszDesktop,//桌面名称
LPARAM lParam //用户定义的值
);
C#:
将回调函数的声明转化为委托:
委托布尔EnumDesktopProc(
[MarshalAs(UnmanagedType .LPTStr)]
字符串桌面名称,
int lParam);
该函数在C#中的声明:
[DllImport(user32.dll ,CharSet=CharSet .自动)]
静态外部布尔枚举桌面(
IntPtr windowStation,
EnumDesktopProc回调,
int lParam);
该表对C#中调用win32函数,以及c编写的动态链接库时参数及返回值的转换做了一个小的总结,如果想进一步了解这方面内容的话,可以参照微软官方中"互操作封送处理"一节。
引自:http://博客。csdn。net/小虫冲1248/archive/2010/01/12/5181345。文件
例子:
///摘要
///定义结构体
////摘要
公共结构UUID2
{
[MarshalAs(UnmanagedType .ByValTStr,SizeConst=37)]
公共字符串szID
}
///摘要
///声明非托管代码中的方法
////摘要
///param name=username 用户名/param
///param name=uId 用户编号/param
///返回标志位1-成功0-没有此用户-1-失败/退货
[DllImport(Camnpr.dll ,EntryPoint=GetUserID ,CharSet=CharSet .Ansi,调用约定=调用约定. Cdecl)]
public static extern int 32 get userid(字符串用户名,ref uuid 2 uId);
///摘要
///根据用户名获取用户编号
////摘要
///param name=sender /param
///param name=e /param
私有void btnGetUserID_Click(对象发送方,EventArgs e)
{
string strPhoneNo=tbPhoneNO .文字。trim();
uuid 2 uId=new uuid 2();
Int32 iReturn=GetUserID(camnpr ,ref uId);
if (iReturn 0)
{
tbUserID .Text=uId.szID
}
其他
{
消息框.显示(我回复.ToString());
}
}
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。