使用VC++调用C#封装的DLL库实现Excel文件的操作(不用安装office软件环境)
用Visual Studio 2005创建C# 的Class Libtary,把下面的代码拷贝进来。
[csharp] view plaincopyprint?
// Class1.cs
// A 易做图 managed DLL that contains a method to add two numbers.
using System;
namespace ManagedDLL
{
// Inte易做图ce declaration.
public inte易做图ce ICalculator
{
int Add(int Number1, int Number2);
};
// Inte易做图ce 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_inte易做图ces_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_inte易做图ces_only
using namespace ManagedDLL;
int _tmain(int argc, _TCHAR* argv[])
{
// Initialize COM.
HRESULT hr = CoInitialize(NULL);
// Create the inte易做图ce 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源码中。
补充:软件开发 , C# ,