c#如何使用外部DLL中的方法(200分送给你!!!) [DllImport("user32.dll",EntryPoint="SendMessage")][DllImport("user32.dll",EntryPoint="FindWindow")] 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 高手们我记得[DllImport("user32.dll",EntryPoint="SendMessage")]这里面有好多参数要设置,能不能将的详细些。多谢了 DLL,是你自己用C#做的吗?在工具箱中右击有一个选项可以用你找到。如果是API,用:[DllImport("user32.dll",EntryPoint="SendMessage")][DllImport("user32.dll",EntryPoint="FindWindow")] DllImport 属性用于指定包含外部方法的实现的 dll 位置。namespace System.Runtime.InteropServices{ [AttributeUsage(AttributeTargets.Method)] public class DllImportAttribute: System.Attribute { public DllImportAttribute(string dllName) {...} public CallingConvention CallingConvention; public CharSet CharSet; public string EntryPoint; public bool ExactSpelling; public bool PreserveSig; public bool SetLastError; public string Value { get {...} } }}准确地说,DllImport 属性具有下列行为: 它只能放置在方法声明上。 它具有单个定位参数:指定包含被导入方法的 dll 名称的 dllName 参数。 它具有五个命名参数: CallingConvention 参数指示入口点的调用约定。如果未指定 CallingConvention,则使用默认值 CallingConvention.Winapi。 CharSet 参数指示用在入口点中的字符集。如果未指定 CharSet,则使用默认值 CharSet.Auto。 EntryPoint 参数给出 dll 中入口点的名称。如果未指定 EntryPoint,则使用方法本身的名称。 ExactSpelling 参数指示 EntryPoint 是否必须与指示的入口点的拼写完全匹配。如果未指定 ExactSpelling,则使用默认值 false。 PreserveSig 参数指示方法的签名应当被保留还是被转换。当签名被转换时,它被转换为一个具有 HRESULT 返回值和该返回值的一个名为 retval 的附加输出参数的签名。如果未指定 PreserveSig,则使用默认值 true。 SetLastError 参数指示方法是否保留 Win32“上一错误”。如果未指定 SetLastError,则使用默认值 false。 它是一次性属性类。 此外,用 DllImport 属性修饰的方法必须具有 extern 修饰符。 在C#中,int 相当于VB6中的long,你要注意了。参数类型不对会引发错误的。我以前也是学vb6的,刚学C#时调用外部的DLL也伤透了脑,呵呵。 DLL是外部的不是我用C#做的,能不能据个例子,比如说该DLL内有两个方法如下Long Getone(int a,int b)void GetTwo(string a)这样在c#里该怎么办呀麻烦了! [DllImport("你的.dll")]public static extern int VC_PosPrintHZString(int a, int b); EntryPoint="SendMessage",如果不加这个你声明的函数,必须和内部的一样,如果加的话你可以自己定义,一般我都和内部一样 上面错拉public static extern long Getone(int a, int b); 添加引用,引用你的dll文件的名称。 [DllImport("user32.dll",EntryPoint="SendMessage")]SendMessage***[DllImport("user32.dll",EntryPoint="XX")]XX** 在C#中,你可以在EntryPoint域通过名字和序号声明一个动态链接库函数,如果在方法定义中使用的函数名与DLL入口点相同,你不需要在EntryPoint域显示声明函数。否则,你必须使用下列属性格式指示一个名字和序号。 [DllImport("dllname", EntryPoint="Functionname")] [DllImport("dllname", EntryPoint="#123")] 值得注意的是,你必须在数字序号前加“#” 下面是一个用MsgBox替换MessageBox名字的例子: [C#] using System.Runtime.InteropServices; public class Win32 { [DllImport("user32.dll", EntryPoint="MessageBox")] public static extern int MsgBox(int hWnd, String text, String caption, uint type); } 许多受管辖的动态链接库函数期望你能够传递一个复杂的参数类型给函数,譬如一个用户定义的结构类型成员或者受管辖代码定义的一个类成员,这时你必须提供额外的信息格式化这个类型,以保持参数原有的布局和对齐。 如何过去网页源码某连接? 这个VB代码 写成C#怎么写 用Assembly.CreateInstance()创建实例与New的区别 修改XML文件的属性 Access 与Oracle 的数据类型转换,相互对应 请教:C#同时呼叫多支存储过程? 祝贺:计算机专业知识库网站开通了! VS 2003,Datagrid(WinForm)中,关于鼠标滚轮的问题 anticlimax进来 使用npoi 操作excel 保存后没有写入 怎么样用c#编程把socks代理转换成http代理呢 请教一个关于随机数的问题
[DllImport("user32.dll",EntryPoint="SendMessage")]
这里面有好多参数要设置,能不能将的详细些。多谢了
在工具箱中右击有一个选项可以用你找到。
如果是API,用:
[DllImport("user32.dll",EntryPoint="SendMessage")]
[DllImport("user32.dll",EntryPoint="FindWindow")]
{
[AttributeUsage(AttributeTargets.Method)]
public class DllImportAttribute: System.Attribute
{
public DllImportAttribute(string dllName) {...}
public CallingConvention CallingConvention;
public CharSet CharSet;
public string EntryPoint;
public bool ExactSpelling;
public bool PreserveSig;
public bool SetLastError;
public string Value { get {...} }
}
}
准确地说,DllImport 属性具有下列行为: 它只能放置在方法声明上。
它具有单个定位参数:指定包含被导入方法的 dll 名称的 dllName 参数。
它具有五个命名参数:
CallingConvention 参数指示入口点的调用约定。如果未指定 CallingConvention,则使用默认值 CallingConvention.Winapi。
CharSet 参数指示用在入口点中的字符集。如果未指定 CharSet,则使用默认值 CharSet.Auto。
EntryPoint 参数给出 dll 中入口点的名称。如果未指定 EntryPoint,则使用方法本身的名称。
ExactSpelling 参数指示 EntryPoint 是否必须与指示的入口点的拼写完全匹配。如果未指定 ExactSpelling,则使用默认值 false。
PreserveSig 参数指示方法的签名应当被保留还是被转换。当签名被转换时,它被转换为一个具有 HRESULT 返回值和该返回值的一个名为 retval 的附加输出参数的签名。如果未指定 PreserveSig,则使用默认值 true。
SetLastError 参数指示方法是否保留 Win32“上一错误”。如果未指定 SetLastError,则使用默认值 false。
它是一次性属性类。
此外,用 DllImport 属性修饰的方法必须具有 extern 修饰符。
我以前也是学vb6的,刚学C#时调用外部的DLL也伤透了脑,呵呵。
Long Getone(int a,int b)
void GetTwo(string a)
这样在c#里该怎么办呀
麻烦了!
public static extern int VC_PosPrintHZString(int a, int b);
你可以自己定义,一般我都和内部一样
public static extern long Getone(int a, int b);
SendMessage***
[DllImport("user32.dll",EntryPoint="XX")]
XX**
[DllImport("dllname", EntryPoint="#123")]
值得注意的是,你必须在数字序号前加“#”
下面是一个用MsgBox替换MessageBox名字的例子:
[C#]
using System.Runtime.InteropServices; public class Win32 {
[DllImport("user32.dll", EntryPoint="MessageBox")]
public static extern int MsgBox(int hWnd, String text, String caption, uint type);
}
许多受管辖的动态链接库函数期望你能够传递一个复杂的参数类型给函数,譬如一个用户定义的结构类型成员或者受管辖代码定义的一个类成员,这时你必须提供额外的信息格式化这个类型,以保持参数原有的布局和对齐。