我就不信邪!难到大家都没有遇到过这样的问题?
不知大家有没有在学C#以前用vc++6写过DLL,现在想在c#中重用这个Dll,你却发现在VS.NET中不能直接调用了,因为有了托管和非托管的区别!!由于这个dll实现了很复杂的功能不可能重写,或者你用的是别人的复杂的Dll,怎么样才能把这个Dll用起来呢?
平台调用(用DllImport)可以把Dll中的函数导出来,但是这远远不够,也许Dll导出的是一个类,类中还有很多的变量、结构,怎样把这个Dll的类也导出来让我们重用呢?
我觉得这是在从c++到.NET转变过程中大家肯定会遇到的问题,但是怎么没人知道呢?连Knight94(愚翁) 也说这比较麻烦,但终归有什么解决的办法呢?看了不少的平台调用的文章,还有MSDN都是反复讲怎么把Dll中的导出函数重用,怎么才能把函数的导出类引进到c#里呢?!极度郁闷中。。。
问题点数:20、回复次数:3Top
1 楼diandian82(点点(nothing))回复于 2006-05-02 21:47:31 得分 20
结构也需要重写的,用C#的 变量类型 重新声明一遍,然后当成参数传进去就行了Top
2 楼shiyubeijing()回复于 2006-05-02 21:50:02 得分 0
或者我更具体的说,下面的例子应该能比较准确的反映我的问题:
例如VC++6.0写的Dll如下:
//VCDll.h
class _declspec(dllimport) Point
{
public:
void add(int x, int y);
int result;
};
//VCDll.cpp
#include <Windows.h>
#include <Stdio.h>
#include "OutClassDll.h"
void Point::add(int x, int y)
{
result = x+y;
}
看看这个简单的例子,Dll导出的是一个类。我如果想用add方法仅仅用PInvoke是不行的!!因为add方法不返回结果,而是改变了Dll中类的成员变量!!
怎么样才能在C#中既利用add方法又能把结果result得到呢?
Top
3 楼shiyubeijing()回复于 2006-05-02 21:53:28 得分 0
diandian82(点点)说的:“用C#的 变量类型 重新声明一遍,然后当成参数传进去就行了”在这里行吗?我在c#中声明一下result,但是怎么传到add函数里呢?
我是新手,没有多少积分可用了,不然我一定给大家多一点分!汗。。。Top




