(第一种方法)
比如,现在有一个outlib.h 和一个outlib.lib,里面定义了一个函数
void doSomething(),现在,我想做一个myoutlib.dll,用这个dll可以
使用doSomething()这个函数做一些事情。我这么做:
1)我建立一个vc工作空间mylib.dsw,这个工程的类型是DLL类型。
2)把outlib.h加入到工程中,用include "outlib.h",具体哪个文件看你的需要
3) 把outlib.lib加入到工程中, 用#pragma comment(lib, "myoutlib.dll")或者
通过连接文件加入到工程中。
4) 接着我做一个自己的函数void myDoSomething
定义为:
__declspec(dllexport) extern "C" void myDoSomething()
{
doSomething();
}
就是简单的封装一下。
5)最后生成动态连接库文件myoutlib.dll。
这个是方法~~
(举例说明)
获得事件的C函数原型定义为:
int TELMATEFUNC TV_GetEvent(int ch,TV_Event *event);
C# 中则被定义为:
[DllImport("Usbid.dll")]
static extern Int32 TV_GetEvent(UInt32 any, [Out] PhoneEvent phoneEvent);
[Out] 是我不经意中发现的,而正是这一发现解决了让我困惑的 得不到任何返回值的 问题。
(举例说明)
编译成DLL,然后以API的方式调用
例如
"[DllImport(""gdi32.dll"", EntryPoint=""AbortDoc"")]
public static extern int AbortDoc (
int hdc
);"
(第二种方法)
如果你不愿意将该lib文件编译为dll也可以直接将该lib文件在组件服务中进行com+组件注册,注册后即可引用。