c#生成dll其他程序调用,C#dll文件

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • windows10缺少dll文件,win10运行时出错无法找到指定dll库文件
  • ,,详解VS2019 dumpbin查看DLL的导出函数
  • ,,解决采集时出现msxml3.dll 错误的方法
  • ,,使用 JScript 创建 .exe 或 .dll 文件的方法
  • ,,VC++ loadlibrary()加载三方dll失败, 返回错误码-126的解决方法
  • .net dll加密,c++ dll 反编译
  • .net dll加密,c++ dll 反编译,保护.net中的dll文件方法(防止破解、反编译dll)
  • .dll是什么文件能不能删除,文件dll怎么删除
  • dll没有在指定的windows上运行,xlivedll没有在windows上运行
  • 删除linkinfo.dll操作无法完成,因为已经在打开,linkinfo.dll是病毒吗
  • python能封装成dll文件吗,python自己封装的类怎么调用
  • 无法定位序数4445于动态链接库libcurl.dll,无法定位序数4445于动态链接库
  • d3dx9-43.dll文件丢失,d3dx9_41.dll文件丢失
  • igfxsrvc.exe木马病毒,igfxsrvc.dll加载失败_1
  • 怎么用360修复dll文件,360 dll文件修复
  • 留言与评论(共有 条评论)
       
    验证码: