2010-11-05 65 views

回答

1

你不应该需要添加一个引用要么KERNEL32.DLL或USER32.DLL。这些DLL是Windows的一部分,可以在您的代码中导入,而无需添加引用。你使用P/Invoke来做到这一点。

例如,调用函数SendMessage user32.dll中,你可以使用下面的C#代码:

[DllImport("user32.dll", CharSet = CharSet.Auto)] 
static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam); 

对于在这些DLL方法的详细信息和代码段,检查出P/Invoke wiki

编辑:您还可以查看this article from the MSDN magazine了解更多关于P/Invoking的信息,特别是作者对风格和最佳实践的评论。

1

user32.dll中等等都没有COM的DLL。您将需要通过[DllImport]使用的P/Invoke,例如(从msdn):

// Use DllImport to import the Win32 MessageBox function. 
[DllImport("user32.dll", CharSet = CharSet.Unicode)] 
public static extern int MessageBox(IntPtr hWnd, String text, 
    String caption, uint type); 
0

在Visual Studio 2005中引用COM componennt:

  1. 选择从项目菜单1添加引用。
  2. 选择COM选项卡2。
  3. 选择要引用的组件,然后单击确定。

这可能是,你实际上想要做的是调用驻留在DLL中的非托管函数。为此,您需要使用P/Invoke。

马克Gravell的回答涵盖了这个语法,但你可以通过查看MSDN上的文档Platform Invoke获得更多的信息,并快速找到特定功能的正确的签名退房PInvoke.net

+0

只是一个小小的挑剔:你为P/Invoke发布的MSDN文档看起来像是Compact Framework,如果这不是ASK的目标,它可能会有一些细微的差异。我意识到这个问题没有具体说明,但是,这可能仍然包含有用的信息。 – 2010-11-05 07:37:52

+0

确实。诚然,我没有检查,并会更新链接,以免造成混淆。感谢您指出了这一点 :) – Crippledsmurf 2010-11-06 07:48:16

相关问题