Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# “怎么做?”;“公共声明Ansi函数”;在VisualBasic6.0中?_C#_Vb.net_Vb6_Urlmon - Fatal编程技术网

C# “怎么做?”;“公共声明Ansi函数”;在VisualBasic6.0中?

C# “怎么做?”;“公共声明Ansi函数”;在VisualBasic6.0中?,c#,vb.net,vb6,urlmon,C#,Vb.net,Vb6,Urlmon,我试图将此VB.NET/C#声明转换为Visual Basic 6.0声明,但遇到了问题(包括C#版本,转换为VB.NET不是问题): 如您所见,在Visual Basic/C中,我们有一个CharSet=CharSet.Ansi部分,我不知道在Visual Basic 6.0中如何做-我尝试在别名末尾添加A别名“UrlMkSetSessionOptionA”。。。但这不起作用(表示在urlmon.DLL中找不到DLL入口点)。如果没有这个,发送给pBuffer的字符串就会变得乱七八糟(我无法识

我试图将此VB.NET/C#声明转换为Visual Basic 6.0声明,但遇到了问题(包括C#版本,转换为VB.NET不是问题):

如您所见,在Visual Basic/C中,我们有一个
CharSet=CharSet.Ansi
部分,我不知道在Visual Basic 6.0中如何做-我尝试在别名末尾添加A<代码>别名“UrlMkSetSessionOptionA”。。。但这不起作用(表示
在urlmon.DLL
中找不到DLL入口点)。如果没有这个,发送给pBuffer的字符串就会变得乱七八糟(我无法识别奇怪的字符)

这是我到目前为止得到的

Public声明子UrlMkSetSessionOption库“urlmon.dll”(ByVal_
只要_
pBuffer作为任何_
ByVal dwbuffer长度等于_
ByVal(保留为长)

将VB6函数声明为
Sub
,使编译器/解释器查找
void
函数(也称为过程),而实际函数具有
int
返回类型

如果您将include语句更改为以下内容,则它应该可以工作:

公共声明函数UrlMkSetSessionOption Lib“urlmon.dll”(ByVal_
只要_
pBuffer作为任何_
ByVal dwbuffer长度等于_
ByVal dw保留为Long)保留为Long

可能您还必须将所有出现的
Long
替换为
Integer
,但由于我缺乏VB6的经验,我不确定。

您将VB6函数声明为
Sub
,使编译器/解释器查找
void
函数(也称为过程),而实际函数具有
int
返回类型

如果您将include语句更改为以下内容,则它应该可以工作:

公共声明函数UrlMkSetSessionOption Lib“urlmon.dll”(ByVal_
只要_
pBuffer作为任何_
ByVal dwbuffer长度等于_
ByVal dw保留为Long)保留为Long

可能您还必须将所有出现的
Long
替换为
Integer
,但由于我缺乏VB6的经验,我不确定。

我刚刚发现声明是正确的,有一种特殊的方法需要调用它-基本上你需要把字符串作为ByVal传递-它只是在我尝试不同东西的组合时随机工作。感谢大家的贡献。以下是声明为sub的调用

UrlMkSetSessionOption URLMON_OPTION_USERAGENT, ByVal strUA, Len(strUA), 0
我希望这对某些人有用-当您调用第二个参数而不使用“ByVal strUA”并只传递“strUA”时,内部函数必须采用ByRef,这意味着它试图使用我们传递给它的变量(ANSI Visual Basic 6.0字符串),当然,当它这样做时,由于C函数使用的字符串类型不是ANSI Visual Basic字符串类型,因此它最终会变得乱七八糟


因此,当将其作为ByVal传递时,它只通过值(而不是引用)传递它,然后可以使用它自己的变量/数据类型组合,该组合与它使用的字符串类型兼容。我希望这能帮助到一些人。

我刚刚发现声明是正确的,并且有一种特殊的方法需要调用它-基本上你需要将字符串作为ByVal传递-它只是在我尝试不同事物的组合时随机工作。感谢大家的贡献。以下是声明为sub的调用

UrlMkSetSessionOption URLMON_OPTION_USERAGENT, ByVal strUA, Len(strUA), 0
Const URLMON_OPTION_USERAGENT = &H10000001
Const URLMON_OPTION_USERAGENT_REFRESH = &H10000002
我希望这对某些人有用-当您调用第二个参数而不使用“ByVal strUA”并只传递“strUA”时,内部函数必须采用ByRef,这意味着它试图使用我们传递给它的变量(ANSI Visual Basic 6.0字符串),当然,当它这样做时,由于C函数使用的字符串类型不是ANSI Visual Basic字符串类型,因此它最终会变得乱七八糟

因此,当将其作为ByVal传递时,它只通过值(而不是引用)传递它,然后可以使用它自己的变量/数据类型组合,该组合与它使用的字符串类型兼容。我希望这能帮助别人

Const URLMON_OPTION_USERAGENT = &H10000001
Const URLMON_OPTION_USERAGENT_REFRESH = &H10000002
将私有函数UrlMkSetSessionOption Lib“urlmon”(ByVal dwOption为Long,ByVal pBuffer为String,ByVal dwBufferLength为Long,ByVal dwReserved为Long)声明为整数

公共函数ChangeUserAgent

(Optional ByVal MyUserAgent As String = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36")

 Call UrlMkSetSessionOption(URLMON_OPTION_USERAGENT_REFRESH, vbNullString, 0, 0)

 Call UrlMkSetSessionOption(URLMON_OPTION_USERAGENT, MyUserAgent, LenB(MyUserAgent), 0)
端函数

将私有函数UrlMkSetSessionOption Lib“urlmon”(ByVal dwOption为Long,ByVal pBuffer为String,ByVal dwBufferLength为Long,ByVal dwReserved为Long)声明为整数

公共函数ChangeUserAgent

(Optional ByVal MyUserAgent As String = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36")

 Call UrlMkSetSessionOption(URLMON_OPTION_USERAGENT_REFRESH, vbNullString, 0, 0)

 Call UrlMkSetSessionOption(URLMON_OPTION_USERAGENT, MyUserAgent, LenB(MyUserAgent), 0)

结束函数

VB6没有此选项,它始终采用ANSI字符串。所以你们得到的已经很好了,除了函数在Sub上。你们怎么能看到胡言乱语是很难猜测的。我不希望这个API函数在这些日子里仍然有任何效果。@Hans Passant谢谢你的评论。你能详细解释一下你说的“我不希望这个API函数在这些日子里仍然有任何影响”的意思吗?是否有替代或更新的函数来代替UrlMkSetSessionOption或?如果是的话,我很想听听。我正在尝试更改会话中承载的WebBrowser控件的用户代理,但WebBrowser控件内置方法不会对所有请求都这样做。InternetSetOption能够做到这一点吗?再次感谢你的宝贵贡献。问真正的问题,而不是这个问题。没有人能猜出“不要对所有的请求都这样做”可能意味着什么。@Hans Passant我不是在问“真正的”问题,因为我不想去那里,我只是在最近几天甚至几年前,当我用尽了所有其他的选择去死胡同的时候,才试图找出这个选项。我只是想知道你所说的不再相关的函数是什么意思。。。如果你能详细说明的话,这对我可能会有用。Wininet可以追溯到上个世纪。没有现代软件再使用它了,包括IE.VB6没有这个