如何在c#中引用c++中的window.h 文件?

我想调用windows API 比如SetWindowLong 可是这个函数里面的参数是宏,必须引用window.h 可是c#里面好像没法include 怎么办啊?高手指点一下,谢谢

不能引用,因为C#中没有宏定义这个说法.用const就可以了.
public const int GWL_STYLE = -16;
public const int GWL_EXSTYLE = -20;
public const int GWL_USERDATA = -21;
public const int GWL_ID = -12;
public const int DWL_MSGRESULT = 0;
public const int DWL_DLGPROC = 4;
public const int DWL_USER = 8;
[DllImport("user32", EntryPoint="SetWindowLong")] public static extern int SetWindowLongA(int hwnd, int nIndex, int dwNewLong)

然后调用给参数就可以了.通常API的宏在C#中都是用const来声明的

用enum也可以,下面是我对WINDOWS MESSAGE的封装

public enum WindowsMessages
{
WM_ACTIVATE = 0x6,
WM_ACTIVATEAPP = 0x1C,
WM_AFXFIRST = 0x360,
WM_AFXLAST = 0x37F,
WM_APP = 0x8000,
WM_ASKCBFORMATNAME = 0x30C,
WM_CANCELJOURNAL = 0x4B,
WM_CANCELMODE = 0x1F,
WM_CAPTURECHANGED = 0x215,
WM_CHANGECBCHAIN = 0x30D,
WM_CHAR = 0x102,
WM_CHARTOITEM = 0x2F,
WM_CHILDACTIVATE = 0x22,
WM_CLEAR = 0x303,
WM_CLOSE = 0x10,
WM_COMMAND = 0x111,
WM_COMPACTING = 0x41,
WM_COMPAREITEM = 0x39,
WM_CONTEXTMENU = 0x7B,
WM_COPY = 0x301,
WM_COPYDATA = 0x4A,
WM_CREATE = 0x1,
WM_CTLCOLORBTN = 0x135,
WM_CTLCOLORDLG = 0x136,
WM_CTLCOLOREDIT = 0x133,
WM_CTLCOLORLISTBOX = 0x134,
WM_CTLCOLORMSGBOX = 0x132,
WM_CTLCOLORSCROLLBAR = 0x137,
WM_CTLCOLORSTATIC = 0x138,
WM_CUT = 0x300,
WM_DEADCHAR = 0x103,
WM_DELETEITEM = 0x2D,
WM_DESTROY = 0x2,
WM_DESTROYCLIPBOARD = 0x307,
WM_DEVICECHANGE = 0x219,
WM_DEVMODECHANGE = 0x1B,
WM_DISPLAYCHANGE = 0x7E,
WM_DRAWCLIPBOARD = 0x308,
WM_DRAWITEM = 0x2B,
WM_DROPFILES = 0x233,
WM_ENABLE = 0xA,
WM_ENDSESSION = 0x16,
WM_ENTERIDLE = 0x121,
WM_ENTERMENULOOP = 0x211,
WM_ENTERSIZEMOVE = 0x231,
WM_ERASEBKGND = 0x14,
WM_EXITMENULOOP = 0x212,
WM_EXITSIZEMOVE = 0x232,
WM_FONTCHANGE = 0x1D,
WM_GETDLGCODE = 0x87,
WM_GETFONT = 0x31,
WM_GETHOTKEY = 0x33,
WM_GETICON = 0x7F
//...太长了不发了
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-01-08
C#和Window.h没有任何牵扯了
它可以用相对简单的方式调用WindowsAPI
请参照:
http://msdn.microsoft.com/zh-cn/library/26thfadc.aspx
比如: MessageBox这个API就可以这样声明下:
[DllImport("user32.dll", CharSet=CharSet.Auto)]
public static extern IntPtr MessageBox(int hWnd, String text,
String caption, uint type);

然后就可以按照普通的C#函数来调用了(摘选自: http://msdn.microsoft.com/zh-cn/library/42b9ea93.aspx
第2个回答  2010-01-08
把c++的文件编译成标准备动态链接库,然后用c#去调这个链接库就行了。
直接不可以引用。

如何在c#中引用c++中的window.h 文件?
不能引用,因为C#中没有宏定义这个说法.用const就可以了.public const int GWL_STYLE = -16;public const int GWL_EXSTYLE = -20;public const int GWL_USERDATA = -21;public const int GWL_ID = -12;public const int DWL_MSGRESULT = 0;public const int DWL_DLGPROC = 4;public const ...

C# 可以引用c++的头文件吗? 该怎么引用呢
1.生成dll,然后让C#的程序引用那个dll 回答者: wefgod3 - 参将 八级 4-6 13:19 C#只能使用P\/Invoke进行平台调用,调用本地代码的函数 标记DllImport就行了 具体的建议你看msdn 有两种方法使用这些函数 2,把那个C++的文件编译成dll,在C#中用[DllImport("dll名")]引进调用 3,在C#中写一...

如何编写一C++或C#程序,实现在已打开的记事本窗口中模拟键盘输入一些字 ...
include <iostream>#include "windows.h"int main(int argc, char** argv) {HWND h=FindWindow("Notepad",NULL);if(h!=NULL){SetActiveWindow(h);SetForegroundWindow(h);SetFocus(h);keybd_event(65,0,0,0);keybd_event(65,0,KEYEVENTF_KEYUP,0);}else{printf("no find");}return 0;...

C#中如何使用头文件(xxxx.h),以及如何将头文件编译成动态链接库(DLL...
C#没法直接用C++的头文件,但是可以直接用dll,使用的技术称作PInvoke,原理是在C#代码中用extern关键字添加dll中所需方法的签名,也就是二楼说的那种方法。此外,如果这个dll是采用com技术实现的,也可以使用.NET平台提供的COM互操作特性直接导入使用。

C#中怎样调用具有C++编写的CString类型参数的方法
这个还真的没搞过,不过建议你去查查 C++中 此类型 和C# 中那个类型对应,GetParameter(CString&) 此函数的意思 大概是类似C#中的按引用传递值。祝你早日找到答案

C#中什么类型对应C++中的LPWSTRwchar
C++中的LPWSTRwchar就是宽字节字符串 在C#中就是指定unicode编码string

如何根据已有的c++程序编写基于c#的WPF界面
1、做好WPF界面控件;2、借助WPF、WinForm的互操作技术,用WinForm用户控件重新包装一下WPF界面控件(因为WPF控件没有句柄,而WinForm控件有句柄);3、C++程序中预留一个空的容器控件,用来放置C#WinForm控件;4、通过C++\/CLR创建WinForm控件的实例,并得到句柄;5、获取C++容器控件的句柄;6、通过SetParent...

如何在C#中调用C\/C++ DLL中的方法
"); } }}\/\/ C#程序配置,一定是类库 二、C++ 程序共有三个程序文件(1) 主程序\/\/ test1.cpp : 定义控制台应用程序的入口点。\/\/\/ 在C++ 项目属性 [配置]-[常规] 中,公共语言运行时支持,一定要选择“公共语言运行时支持”\/\/#include "stdafx.h"#include "yotopcompany.h"#using...

怎样在C++工程中集成C#窗口
从我们的 ActiveX控件中接收消息创建C++ Win32 Application 工程创建一个新的 Win32 工程并命名为“CPP_Container:”:2.采用默认设置并按下“OK”按钮:插入C# ActiveX 控件到C++ 窗口添加下面代码到CPP_Container.cpp开头:复制代码#define DOT_NET_BUTTON_PRESSED 0x0400HWND _hAtl;HWND _hSelf;IUnknown* _pUnk...

c#如何调用C++中的类
基本上回答是调不了,原因来自引用名和调用约定两方面。这个需要从VC++导出类的原理说起。类从本质上来说是数据结构和封装的操作两部分。数据结构定义在头文件当中,编译的时候就可以访问到;而成员函数是从DLL中导出的。导出C++类库的时候,这些函数名字会按照编译器的标准做一个扩展,比如说 class B{...

相似回答