如何把C++的Dll函数转化为C#函数,参数中含有默认值

lsxsxs 2012-08-31 10:01:36
在C++的Dll中有这样一个函数
int GetInfo(char *ip=NULL);
这个我转化成C#需要写成两个函数吗?
需要写成int GetInfo(string ip);和int GetInfo();吗?
求大家指点一下,谢谢
...全文
295 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
龙泉剑 2012-08-31
  • 打赏
  • 举报
回复
直接GetInfo(str);C#中string默认值就是null
lsxsxs 2012-08-31
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
你必须显示声明所有参数,否则会造成调用堆栈损坏。
C++在调用dll时,由于编译器有头文件参考,会自动生成正确的调用。而PInvoke没有这种能力,因此必须提供所有的参数。如果你希望某个参数使用默认值,传递头文件中声明的默认参数就可以了。如果你希望C#调用中实现可选参数的行为,可以用一个函数进行包装。
[/Quote]
就我这个函数,具体的应该怎么做呢,因为在C++中我可以直接用GetInfo();转化成C#之后是必须用GetInfo(null);还是其他什么
iyomumx 2012-08-31
  • 打赏
  • 举报
回复
你必须显示声明所有参数,否则会造成调用堆栈损坏。
C++在调用dll时,由于编译器有头文件参考,会自动生成正确的调用。而PInvoke没有这种能力,因此必须提供所有的参数。如果你希望某个参数使用默认值,传递头文件中声明的默认参数就可以了。如果你希望C#调用中实现可选参数的行为,可以用一个函数进行包装。
cheng2005 2012-08-31
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]
引用 6 楼 的回复:
引用 5 楼 的回复:
C#中函数的参数是不能设定默认值的,C++写的dll中int GetInfo(char *ip=NULL);
你在C#中导入这个DLL声明:
DllImport(*.dll)
public static extern int GetInfo(string ip);

直接使用GetInfo(ip)不就行了,如果ip=null为空,他调用……
[/Quote]
你这么说,他一辈子都没记性,下次还是这么胡言乱语。
你骂他一次,一般人就有记性了,说话之前起码会走一下大脑。
dong_zonjan 2012-08-31
  • 打赏
  • 举报
回复
谁有VB6 成生DLL的工具
bigbaldy 2012-08-31
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
引用 5 楼 的回复:
C#中函数的参数是不能设定默认值的,C++写的dll中int GetInfo(char *ip=NULL);
你在C#中导入这个DLL声明:
DllImport(*.dll)
public static extern int GetInfo(string ip);

直接使用GetInfo(ip)不就行了,如果ip=null为空,他调用的不就是你C++中的
G……
[/Quote]
发现这里很多你这样的人,您说的的确没错,但没必要讽刺和谩骂别人,最讨厌这种人了。如果是我回答,我会这样说:
“兄弟,C# 4.0就开始支持缺省参数了,而且还支持命名参数,非常方便,你可以试试,很好用。”
告诉别人答案即可,没必要骂人
cheng2005 2012-08-31
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
楼上的嘴巴干净点,别动不动就屁的,都是来这边学习的,你NB个啥啊
[/Quote]
学习和误导别人是两个概念。
别把自己说的好像很无辜的样子。如果没人纠正你的错误,那么你的错误思想就直接传递给了楼主,然后他就会一直认为C#就是没有缺省参数。
cheng2005 2012-08-31
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
C#中函数的参数是不能设定默认值的,C++写的dll中int GetInfo(char *ip=NULL);
你在C#中导入这个DLL声明:
DllImport(*.dll)
public static extern int GetInfo(string ip);

直接使用GetInfo(ip)不就行了,如果ip=null为空,他调用的不就是你C++中的
GetInfo(NULL)吗……
[/Quote]
放屁,C# 4.0 开始支持可缺省的参数。
直接int GetInfo(string ip = null)就可以了。
龙泉剑 2012-08-31
  • 打赏
  • 举报
回复
C#中函数的参数是不能设定默认值的,C++写的dll中int GetInfo(char *ip=NULL);
你在C#中导入这个DLL声明:
DllImport(*.dll)
public static extern int GetInfo(string ip);

直接使用GetInfo(ip)不就行了,如果ip=null为空,他调用的不就是你C++中的
GetInfo(NULL)吗?
lsxsxs 2012-08-31
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
直接GetInfo(str);C#中string默认值就是null
[/Quote]
我是想传C++中的NULL进去,在C++中直接用GetInfo();它就会自动调用NULL作为传入值了。
在C#中我要把这个函数转化成什么形式,传什么参数进去才能达到这个效果呢。

111,093

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧