当前位置:编程学习 > C#/ASP.NET >>

C#能否通过用C++把静态库lib封装到一个dll中的方式实现调用lib中的函数?

准确情况是这样的:
现在通过先用C++写个类调用静态库usblib.lib中的函数,将类封装到一个dll,最后通过C#来调用这个DLL来处理。

目前功能都OK了,可是一定要求安装usblib。

请问要怎么设置或如何来使dll直接把usblib.lib完全封装,而不用另外安装呢?

谢谢。 --------------------编程问答-------------------- 没人知道怎么用吗?。。。
着急。。。 --------------------编程问答-------------------- 试试用C++写的类直接显式链接usblib.dll,将类封装成自己的dll,最后再用C#调用这个dll。

C++显式链接dll:
1).将Dll文件Sample.dll置于工程所在目录
2).源代码调用Dll中的Function(int)函数的方法
#include <windows.h> //使用函数和某些特殊变量
typedef void (*DllProc)(int); //Dll函数指针
void SecondLevelDllFunction()
{
DllProc Proc;
HINSTANCE hInstLibrary = LoadLibrary("Sample.dll");
if (hInstLibrary == NULL)
FreeLibrary(hInstLibrary);

Proc = (Proc)GetProcAddress(hInstLibrary, "Function");
if (Proc == NULL)
FreeLibrary(hInstLibrary);
Proc(123);

FreeLibrary(hInstLibrary);
}

C#调用这个dll:
using System.Runtime.InteropServices;
public partial class CSClass
{
[DllImport("SecondLevelSample.dll")]
private static extern void SecondLevelDllFunction();
...
} --------------------编程问答-------------------- 不会啊,既然是静态库,linker会把它放入dll里面,它就不需要了。 --------------------编程问答-------------------- libuse.lib是静态库。
引用 2 楼 u012140133 的回复:
试试用C++写的类直接显式链接usblib.dll,将类封装成自己的dll,最后再用C#调用这个dll。

C++显式链接dll:
1).将Dll文件Sample.dll置于工程所在目录
2).源代码调用Dll中的Function(int)函数的方法
#include <windows.h> //使用函数和某些特殊变量
typedef void (*DllProc)(int); //Dll函数指针
void SecondLevelDllFunction()
{
DllProc Proc;
HINSTANCE hInstLibrary = LoadLibrary("Sample.dll");
if (hInstLibrary == NULL)
FreeLibrary(hInstLibrary);

Proc = (Proc)GetProcAddress(hInstLibrary, "Function");
if (Proc == NULL)
FreeLibrary(hInstLibrary);
Proc(123);

FreeLibrary(hInstLibrary);
}

C#调用这个dll:
using System.Runtime.InteropServices;
public partial class CSClass
{
[DllImport("SecondLevelSample.dll")]
private static extern void SecondLevelDllFunction();
...
}
--------------------编程问答--------------------
引用 3 楼 caozhy 的回复:
不会啊,既然是静态库,linker会把它放入dll里面,它就不需要了。


嗯。是的呀。我也是这么认为的。我的做法就是在project的配置里关联上libusb.lib

另外按如下blog中方法三做设置

方法三:

工程-》属性-》配置属性-》常规-》MFC的使用,选择"在静态库中使用mfc"
这样生成的exe文件应该就可以在其他机器上跑了。

不知道是否还有什么需要做的。

http://blog.sciencenet.cn/blog-3199-265459.html --------------------编程问答-------------------- 大神们快来救救 小妹哈。。。

--------------------编程问答-------------------- 你是用0.1版的libusb的吗?
1.0版的有DLL形式的

连结如下
http://downloads.sourceforge.net/project/libusbx/releases/1.0.16/source/libusbx-1.0.16.tar.bz2

不然也可以用libusbDotnet
http://downloads.sourceforge.net/project/libusbdotnet/LibUsbDotNet/LibUsbDotNet%20v2.2.8/LibUsbDotNet_Bin.2.2.8.zip --------------------编程问答-------------------- 谢谢楼上的。
由于目前我是在libusb的基础上做的ptp。 功能都OK了,不想再大改。而且项目急。
耗不起。

就目前来看,是否是哪里的设置不对。 --------------------编程问答-------------------- 1.
工程-》属性-》配置属性-》常规-》MFC的使用,选择"在静态库中使用mfc"
libUSB 不是 MFC ~ 没有相关

2.
跑exe 要求安装usblib ? --------------------编程问答-------------------- 跟程式的编译比较没有关系

因为libUSB.lib的函式会再去叫用 .dll 及 .sys
若找不到就会要求安装

把libusb0.dll拷贝到C:\WINDOWS\SYSTEM32\
把libusb0.sys拷贝到C:\WINDOWS\SYSTEM32\DRIVERS\

再执行看看 --------------------编程问答-------------------- 或是把这几个档案 .dll,.sys 跟你的程序放在同一个目录跑看看 --------------------编程问答--------------------

引用 9 楼 u012546037 的回复:
1.
工程-》属性-》配置属性-》常规-》MFC的使用,选择"在静态库中使用mfc"
libUSB 不是 MFC ~ 没有相关

2.
跑exe 要求安装usblib ?


目前的现像是2,就是得安装usblib才行。。我是在VC里做DLL的,有可能就是你说的Libusb不是MFC,

但正确的设置方法应该是要怎么样呢?

现在我是建立了一个做DLL的工程,生成dll。然后再把这个dll放到C#工程里来应用的 --------------------编程问答-------------------- 因为libUSB.lib的函式会再去叫用 .dll 及 .sys
若找不到就会要求安装

把libusb0.dll拷贝到C:\WINDOWS\SYSTEM32\
把libusb0.sys拷贝到C:\WINDOWS\SYSTEM32\DRIVERS\

再执行看看 
补充:.NET技术 ,  VC.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,