2.将C#中的值传给dll中的一个变量,如何赋值?
14 个解决方案
#1
添加对dll的引用
#2
(1)也可以是系统目录、程序目录、根目录或者程序中指定的目录。
(2)函数传参数。
(2)函数传参数。
#3
C不是不用引用吗?
#4
#5
- -何必呢.... 我有说错什么么,添加引用后该DLL公开的所有方法函数变量不是都能直接看到了么....
#6
你说得也没错
只是楼主没说没明白而已
#7
函数传参数,用不用声明方法?比如C#中的变量A赋值给dll中的B方法中的变量C,是应该A=B.C还是
public static extern int 方法 A=B这样?
#8
把函数的声明、定义和调用分清楚。
[dllimport(...)]
public static extern int 方法b(int 参数);
这个是声明
因为函数是在dll中实现的,所以不需要定义。
调用
int result = 方法b(a); //这里的a是实参
在C语言的dll中:
int 方法b(int c) //这里的c是形参
{
...
}
另外5l说的是托管的dll,这里说的是非托管的dll。
[dllimport(...)]
public static extern int 方法b(int 参数);
这个是声明
因为函数是在dll中实现的,所以不需要定义。
调用
int result = 方法b(a); //这里的a是实参
在C语言的dll中:
int 方法b(int c) //这里的c是形参
{
...
}
另外5l说的是托管的dll,这里说的是非托管的dll。
#9
曹版主已经回答得很详细了,本人再画蛇添足一回.
关于C#调用C函数,本人有两个小例子:
《[科普小短文]在C#中调用C语言函数》
http://blog.csdn.net/xinyaping/article/details/7288325
这是在Windows平台下C#调用C的DLL的例子;
《[科普小短文]在C#中调用C语言函数 (Linux & Mono版)》
http://blog.csdn.net/xinyaping/article/details/7672171
这是在Linux平台下C#调用C的DLL的例子。
另外,如果不拘泥于DLL(或者Linux下的.so),直接用C#调用C/C++的函数也是可以的,在Windows平台下的方法是借助C++/CLI。在Linux平台下有一个与之相对应(也非常类似、用法相同)的解决方案,那就是 CXXI。
这些仅仅作为一些补充,稍微开阔一下视野应该没坏处。
#10
辛老大,挑战一下难度嘛,把题目修改一下:
用C实现各种DLL,并且用C#调用之:
各种DLL包括:COM DLL,WebService DLL,Win32 API DLL
用C实现各种DLL,并且用C#调用之:
各种DLL包括:COM DLL,WebService DLL,Win32 API DLL
#11
好吧,有空了我写写Demo吧。不过说实话,第一,现在业余时间越来越少,用来写博客的时间也非常少;第二,就算我不来写这个Demo,你所提的这些,网上一搜都能搜到。
#12
對含有類的C++Dll 是沒辦法導出的吧 MS只能用不在類裏面的方法等。
如果可以導出類 求Demo
如果可以導出類 求Demo
#13
你的目的无非就是想要直接用DLL里面的C++ class嘛。
不导出,直接用,可以吗?只不过在这里不能光用C#了,要借助Managed C++了。
反正Managed C++也是.Net的范围。
创建一个Managed C++ class来提供Native C++ class和C#之间的接口。仅仅是个接口而已,执行的时候真正调用的还是Native C++ class.
#14
小弟刚学C#不久,有好多的东西不是太清楚,让各种见笑了,看了上面各种大大的回复,有些明白问题了,目前正在编程中,如果遇到什么问题再问,先把分给各种加了,谢谢。
#1
添加对dll的引用
#2
(1)也可以是系统目录、程序目录、根目录或者程序中指定的目录。
(2)函数传参数。
(2)函数传参数。
#3
C不是不用引用吗?
#4
#5
- -何必呢.... 我有说错什么么,添加引用后该DLL公开的所有方法函数变量不是都能直接看到了么....
#6
你说得也没错
只是楼主没说没明白而已
#7
函数传参数,用不用声明方法?比如C#中的变量A赋值给dll中的B方法中的变量C,是应该A=B.C还是
public static extern int 方法 A=B这样?
#8
把函数的声明、定义和调用分清楚。
[dllimport(...)]
public static extern int 方法b(int 参数);
这个是声明
因为函数是在dll中实现的,所以不需要定义。
调用
int result = 方法b(a); //这里的a是实参
在C语言的dll中:
int 方法b(int c) //这里的c是形参
{
...
}
另外5l说的是托管的dll,这里说的是非托管的dll。
[dllimport(...)]
public static extern int 方法b(int 参数);
这个是声明
因为函数是在dll中实现的,所以不需要定义。
调用
int result = 方法b(a); //这里的a是实参
在C语言的dll中:
int 方法b(int c) //这里的c是形参
{
...
}
另外5l说的是托管的dll,这里说的是非托管的dll。
#9
曹版主已经回答得很详细了,本人再画蛇添足一回.
关于C#调用C函数,本人有两个小例子:
《[科普小短文]在C#中调用C语言函数》
http://blog.csdn.net/xinyaping/article/details/7288325
这是在Windows平台下C#调用C的DLL的例子;
《[科普小短文]在C#中调用C语言函数 (Linux & Mono版)》
http://blog.csdn.net/xinyaping/article/details/7672171
这是在Linux平台下C#调用C的DLL的例子。
另外,如果不拘泥于DLL(或者Linux下的.so),直接用C#调用C/C++的函数也是可以的,在Windows平台下的方法是借助C++/CLI。在Linux平台下有一个与之相对应(也非常类似、用法相同)的解决方案,那就是 CXXI。
这些仅仅作为一些补充,稍微开阔一下视野应该没坏处。
#10
辛老大,挑战一下难度嘛,把题目修改一下:
用C实现各种DLL,并且用C#调用之:
各种DLL包括:COM DLL,WebService DLL,Win32 API DLL
用C实现各种DLL,并且用C#调用之:
各种DLL包括:COM DLL,WebService DLL,Win32 API DLL
#11
好吧,有空了我写写Demo吧。不过说实话,第一,现在业余时间越来越少,用来写博客的时间也非常少;第二,就算我不来写这个Demo,你所提的这些,网上一搜都能搜到。
#12
對含有類的C++Dll 是沒辦法導出的吧 MS只能用不在類裏面的方法等。
如果可以導出類 求Demo
如果可以導出類 求Demo
#13
你的目的无非就是想要直接用DLL里面的C++ class嘛。
不导出,直接用,可以吗?只不过在这里不能光用C#了,要借助Managed C++了。
反正Managed C++也是.Net的范围。
创建一个Managed C++ class来提供Native C++ class和C#之间的接口。仅仅是个接口而已,执行的时候真正调用的还是Native C++ class.
#14
小弟刚学C#不久,有好多的东西不是太清楚,让各种见笑了,看了上面各种大大的回复,有些明白问题了,目前正在编程中,如果遇到什么问题再问,先把分给各种加了,谢谢。