当前位置: 代码迷 >> VC >> C#能否通过用C++把静态库lib封装到一个dll中的形式实现调用lib中的函数
  详细解决方案

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

热度:433   发布时间:2016-05-05 00:04:49.0
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里面,它就不需要了。
------解决方案--------------------
你是用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
------解决方案--------------------
1.
工程-》属性-》配置属性-》常规-》MFC的使用,选择"在静态库中使用mfc"
libUSB 不是 MFC ~ 没有相关

2.
跑exe 要求安装usblib ?
------解决方案--------------------
跟程式的编译比较没有关系

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

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

再执行看看
------解决方案--------------------
因为libUSB.lib的函式会再去叫用 .dll 及 .sys
若找不到就会要求安装

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

再执行看看 
  相关解决方案