用Visual Studio 2005創建C# 的Class Libtary,把下面的代碼拷貝進來。
[csharp] view plaincopyprint?
// Class1.cs
// A simple managed DLL that contains a method to add two numbers.
using System;
namespace ManagedDLL
{
// Interface declaration.
public interface ICalculator
{
int Add(int Number1, int Number2);
};
// Interface implementation.
public class ManagedClass:ICalculator
{
public int Add(int Number1,int Number2)
{
return Number1+Number2;
}
}
}
打開 ” 工具=》 Visual Studio 2005 Command Prompt “輸入” sn.exe -k MyKeyFile.SNK “創建密鑰文件,將 MyKeyFile.SNK文件從C:\Program Files\Microsoft Visual Studio 8\vc\bin目錄拷貝到你的工程目錄下,打開 AssemblyInfo.cs文件。替換代碼:
[assembly: ComVisible(false)]
[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyKeyFile("")]
使用
[assembly: ComVisible(true)]
[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyKeyFile("..\\..\\MyKeyFile.SNK")]
編譯連接就能夠生成Dll文件。
為了能夠調用新建的托管DLL文件,需要將這個組件進行注冊。
打開Visual Studio 2005 Command Prompt,切換到包含剛才生成的DLL目錄,輸入命令”RegAsm.exe ManagedDLL.dll /tlb:ManagedDLL.tlb /codebase ”,會提示注冊成功。
接下來新建C++的Win32 Project 項目,打開代碼視圖,引入RegAsm.exe生成的庫文件。
// Import the type library.
#import "..\ManagedDLL\bin\Debug\ManagedDLL.tlb" raw_interfaces_only
注意文件路徑,和DLL文件在同一路徑下。
完整文件的代碼如下:
C++ Client
// CPPClient.cpp: Defines the entry point for the console application.
// C++ client that calls a managed DLL.
#include "stdafx.h"
#include "tchar.h"
// Import the type library.
#import "..\ManagedDLL\bin\Debug\ManagedDLL.tlb" raw_interfaces_only
using namespace ManagedDLL;
int _tmain(int argc, _TCHAR* argv[])
{
// Initialize COM.
HRESULT hr = CoInitialize(NULL);
// Create the interface pointer.
ICalculatorPtr pICalc(__uuidof(ManagedClass));
long lResult = 0;
// Call the Add method.
pICalc->Add(5, 10, &lResult);
wprintf(L"The result is %d\n", lResult);
// Uninitialize COM.
CoUninitialize();
return 0;
}
Note:
注意更改通用語言運行庫支持的編譯器選項為(//clr:oldSyntax)。
步驟如下:右鍵項目屬性=》配置屬性=》常規=》公共語言運行時支持=》原來的語法(clr:oldSyntax)
到此,C++調用C#的Dll庫文件的Demo已經完成。
下面是在此基礎上在C#的DLL文件裡添加Excel文件的操作實現。
添加引用到你的項目:
其實我只添加了org.in2bits.MyXls.dll文件,這個文件可以自己百度。
點擊C#的項目,點擊引用,右鍵添加引用,找到org.in2bits.MyXls.dll文件如下圖:
添加代碼:using org.in2bits.MyXls;
這時進行編譯,你可能遇到如下提示的錯誤,
經過以上操作,引用DLL文件已經成功,接下來就可以使用DLL文件裡的類和方法、屬性了。
可以參考怎麼調試C#的DLL,這個自己百度解決。
Have A Good Time!開始你的冒險之旅吧。。。。
參考:
導出Excel的測試,轉載至上面的一個鏈接,在這裡謝謝了。
[csharp]
protected void ExportBtn_Click(object sender, EventArgs e)
{
XlsDocument xls = new XlsDocument();
xls.FileName = "TestList.xls";
int rowIndex = 1;
Worksheet sheet = xls.Workbook.Worksheets.Add("測試表");//Sheet名稱
Cells cells = sheet.Cells;
Cell cell = cells.Add(1, 1, "編號");
cell.Font.Bold = true;
cell = cells.Add(1, 2, "名稱");
cell.Font.Bold = true;
foreach (DataRow row in table.Rows)
{
cells.Add(rowIndex, 1, rowIndex);
cells.Add(rowIndex, 2, "名稱"+rowIndex);
rowIndex++;
}
xls.Send();//如果改成Save()函數,就能保存Excel文件到本地了。文件在C++項目的源文件目錄下。
}
哦,忘記了,注意還需要把org.in2bits.MyXls.dll文件,拷貝到VC++生成的EXE文件夾目錄下(這個可以根據Visual Studio 的輸出提示,我沒看到,差點功虧一篑),經過這步在Visual Studio 環境下調試可以進到DLL源碼中。