C#进行平台调用时利用C++头文件的小技巧

原创 2006年05月26日 01:23:00

C#进行平台调用时利用C++头文件的小技巧

 

我正好在做一个控件,其中需要引用WinXP自带的UxTheme.dll,因为我想生成一个纯粹的C#程序,而不是利用Manage C++来成一个托管类的动态库来作为C#程序的基础,因此想到需要转换定义。

UxTheme.dll共有47个命名函数,找到VC7(我使用VS2003)中的对应头文件UxTheme.h,在UltraEdit32这个工具中很方便地替换生成了C#进行平台调用的代码。问题是这些函数大都使用了一些常量定义,在VC7的头文件是Tmschema.h,而且它全部使用宏,KAO,如果要手工转的话,那是一件巨大的工作量。

我想到必须要有一个C/C++头文件宏扩展工具,在网上找了一下,没有找到。不过也还是找到了一个解决办法。以VC7为例,首先建一个最简单的项目——控件台应用,因为它没有多余的东东。然后将你不需要的全部删掉,看下图

其中hh.cpp只有最简单的代码

#include "11.h"

#using <mscorlib.dll>

 

using namespace System;

 

int _tmain()

{

 

    return 0;

}

11.h则更简单,只有一句,它包括你需要扩展的头文件

#include <tmschema.h>

这样一个相当简单的C++程序就完成了。接下来我们需要的只是设置一下这个项目的编译属性。你需要找到C/C++属性里的预编译头设置如下图设定就可以了

然后生成这个项目,找到以.i结尾的文件,是不是一个完整的已扩展的C++代码出来了,下面的你只需要用查找替换工具,很容易就以转成C#定义了。最后,需要注意的时,尽量去掉不必要的头文件,以减小生成尺寸。

请确保此文件可访问并且是一个有效的程序集或COM组件

重装系统后,打开项目发现一个dll引用失败,于是重新添加引用.结果报错:请确保此文件可访问并且是一个有效的程序集或COM组件 报错是因为此程序集/com组件未注册而导致不能直接引用. 解决方法:首先复...
  • SunCherryDream
  • SunCherryDream
  • 2014年09月27日 17:03
  • 13297

将C/C++头文件转换成C#的解释器

http://mc.rednael.com/Compile.aspx
  • wuqiubin
  • wuqiubin
  • 2009年04月28日 16:44
  • 967

InteropSignatureToolkitSetup 可以把c++的dll库的头文件自动转换为C# DllImport代码

  • 2014年07月10日 21:24
  • 1.46MB
  • 下载

C#引用C++头文件的方法

有两种方法使用这些函数 1,把那个C++的文件编译成dll,在C#中用[DllImport("dll名")]引进调用 2,在C#中写一个类,把C++中的函数复制进C#的类中,要注意的是C#没有指针,涉...
  • cdjcong
  • cdjcong
  • 2012年12月16日 13:54
  • 3989

C# 中使用C++导出的DLL文件

摘要本篇博客主要介绍使用C++生成DLL库,并在C#工程之中进行调用。本技术可以用于Unity开发中,可以将一些复杂计算量较大的工作使用C++编写,生成DLL文件后在Unity中使用C#脚本进行调用。...
  • jcq521045349
  • jcq521045349
  • 2017年07月17日 23:52
  • 243

C#调用C++写的dll,包含结构体转换和C#动态调用dll(头文件转换为类)

C#调用C++写的dll,包含结构体转换和C#动态调用dll 2008年08月19日 星期二 17:13 这段时间用C++给客户做了一个通讯的dll。但客户是用C#的,所以研究了下...
  • lhs198541
  • lhs198541
  • 2012年05月23日 01:05
  • 1937

【转】C/C++编译原理

这里并不是讨论大学课程中所学的《编译原理》,只是写一些我自己对C++编译器及链接器的工作原理的理解和看法吧,以我的水平,还达不到讲解编译原理(这个很复杂,大学时几乎没学明白)。要明白的几个概念: ...
  • yfmmtz
  • yfmmtz
  • 2015年09月08日 11:35
  • 757

有关C++中的多文件组织结构

今天读到了多文件组织结构,感觉对C++的认识又上了一个层次,接下来就谈谈多文件组织结构。 C++中程序的显著特点,有三部分构成,类的定义,类的实现,类的使用(主函数)。 通常一个程序是由多个源程序...
  • CSDN_LYY
  • CSDN_LYY
  • 2014年12月13日 23:12
  • 1695

C#进行平台调用时利用C++头文件的小技巧

导读:   C#进行平台调用时利用C++头文件的小技巧   我正好在做一个控件,其中需要引用WinXP自带的UxTheme.dll,因为我想生成一个纯粹的C#程序,而不是利用Manage C++来成一...
  • Iamfish
  • Iamfish
  • 2008年03月22日 19:52
  • 1688

C#平台调用

原文地址http://www.51one.net/study/cc/2625.html#pinvoke_callingdllexport   ...
  • 500ML
  • 500ML
  • 2007年05月05日 00:06
  • 2777
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#进行平台调用时利用C++头文件的小技巧
举报原因:
原因补充:

(最多只允许输入30个字)