您的位置:首页 > 编程语言 > C语言/C++

使用VC++调用C#封装的DLL库实现Excel文件的操作(不用安装office软件环境)

2012-08-17 16:38 851 查看
使用VC++调用C#封装的DLL库实现Excel文件操作(不用安装office环境)

【注】这里只是简单实现了,更详细操作,还有待认真研究。

参考网页:

http://support.microsoft.com/kb/828736/en-us (好像有篇中文的文章)

用Visual Studio 2005创建C# 的Class Libtary,把下面的代码拷贝进来。

// 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文件的操作实现。

参考网页;

http://blog.bossma.cn/dotnet/myxls-export-excel/



添加引用到你的项目:






其实我只添加了org.in2bits.MyXls.dll文件,这个文件可以自己百度。这也有,地址:http://sourceforge.net/projects/myxls/files/

点击C#的项目,点击引用,右键添加引用,找到org.in2bits.MyXls.dll文件如下图:






添加代码:using org.in2bits.MyXls;

这时进行编译,你可能遇到如下提示的错误,



这就要用到了我的另一篇转载文章,地址:/article/10452008.html 注意命令行中的空格,我纠结了好久。。。。

哈哈,终于要成功了。

经过以上操作,引用DLL文件已经成功,接下来就可以使用DLL文件里的类和方法、属性了。

可以参考怎么调试C#的DLL,这个自己百度解决。

Have A Good Time!开始你的冒险之旅吧。。。。

参考:

导出Excel的测试,转载至上面的一个链接,在这里谢谢了。

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源码中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐