封装时间转换工具类_利用swig封装C++的dll为C#方便使用
使用C++開發(fā)界面,時(shí)間效率上來說,不如C#開發(fā)的快和方便。但是CTP的庫是C++的,并沒有C#的庫,網(wǎng)上也有人用C#的PINVOKE的方式將C++的函數(shù)一個(gè)個(gè)轉(zhuǎn)換為C#能用的接口,我是看了下,原理ok,但是真心轉(zhuǎn)換起來工作量太大了。
借鑒
swig把CTP轉(zhuǎn)java?blog.csdn.net這篇文章,我想swig轉(zhuǎn)C#這個(gè)方式應(yīng)該更容易,于是今天先寫一個(gè)demo,然后嘗試著轉(zhuǎn)轉(zhuǎn)看。先參考如下的一個(gè)基礎(chǔ)例子。
swig轉(zhuǎn)C#?blog.csdn.netswig是將C++原始代碼,包裝成一個(gè)方便其他語言調(diào)用的工具。
swig轉(zhuǎn)C#主要做兩步操作:
但是現(xiàn)在還有一個(gè)問題:
以上C#的例子中,沒有繼承實(shí)現(xiàn)和回調(diào)這兩種實(shí)現(xiàn)。只有解決了這兩個(gè)問題,才能進(jìn)一步轉(zhuǎn)換CTP的類庫。
首先得解決這個(gè),于是自己在其基礎(chǔ)上,按照如下7步驟生成一個(gè)可以被C#方便使用的C++的dll。
一、利用Swig生成C#方便使用的DLL
step 1 : 創(chuàng)建了如下項(xiàng)目,一個(gè)C++動(dòng)態(tài)鏈接庫的項(xiàng)目,一個(gè)C#桌面應(yīng)用程序。
step 2 :其中c++_file.idl文件內(nèi)容如下,這個(gè)文件是swig轉(zhuǎn)換規(guī)則的定義文件,同時(shí),要修改該文件屬性,否則項(xiàng)目編譯會(huì)把該文件也編譯進(jìn)去,會(huì)報(bào)錯(cuò)的。右鍵該文件屬性:項(xiàng)類型->自定義生成工具。
%module(directors = "1") cppdll /*directors = "1",才可以使用虛函數(shù)的多態(tài)特性,否則只能繼承,不能多態(tài)*/ %{ /* 在包裝代碼中包含頭文件 */ #include "c++_file.h" %} %feature("director") Addmethod; /*需要指明多態(tài)的類,若module(directors = "1")未聲明,則此處沒有意義*//* 解析頭文件生成包裝代碼 */ %include "c++_file.h"step 3 :c++_file.h
#pragma once class Addmethod { public:virtual int add(int a, int b) { return 0; };virtual ~Addmethod() {} };class CPlusPlusClass { public://加法計(jì)算實(shí)際上是通過Addmethod.add實(shí)現(xiàn)int Add(int a,int b,Addmethod* method); };step 4 :C++_project.cpp
// C++_project.cpp: 定義 DLL 應(yīng)用程序的導(dǎo)出函數(shù)。 //#include "stdafx.h" #include "c++_file.h" int CPlusPlusClass::Add(int a, int b,Addmethod* method) {if(method)return method->add(a,b);else return a + b; }step 5 :以上代碼寫好后,就可以使用swig進(jìn)行轉(zhuǎn)換了,命令行切換到項(xiàng)目c++_file.idl所在目錄,輸入如下命令,(swig已經(jīng)加到系統(tǒng)的環(huán)境變量中才可以直接使用命令,否則需要全路徑)
swig -c++ -csharp c++_file.idlstep 6 :運(yùn)行沒有報(bào)錯(cuò),則會(huì)生成如下文件,將其中后綴為.cs的文件全部拷貝到C#項(xiàng)目中。
step 7 :在C++_project項(xiàng)目上,會(huì)看到debug目錄下有生成一個(gè)C++_project.dll文件。將該文件拷貝到C#項(xiàng)目的debug目錄下。
二、C#使用上述DLL
在C#項(xiàng)目中,使用代碼如下:
- 創(chuàng)建子類ChildMethod 繼承C++的Addmethod類,并重寫方法add
- 創(chuàng)建子類Child類,繼承C++中的CPlusPlusClass類,并新增方法showChild
- 調(diào)用child對(duì)象,并將childMethod對(duì)象傳入,以便C++的dll庫進(jìn)行多態(tài)回調(diào)。
總結(jié)
整體而言,利用swig封裝C++為C#的調(diào)用方式,可以極大的減輕工作量,同時(shí)方便后續(xù)高效率的開發(fā)使用原先的C++庫。
總結(jié)
以上是生活随笔為你收集整理的封装时间转换工具类_利用swig封装C++的dll为C#方便使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 12伏的蓄电池有几个单格组成_福建汤浅蓄
- 下一篇: double 二进制 java_C#中将