- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
嘿,我正在尝试通过自动 VB6 代码转换器将一些 VB6 代码转换为 VS 2008。大多数都做得很好,但有一些需要改进。
有人说润色是这段代码:
InitializeGrCap = GrCapInitialize(AddressOf GrCapStatusEventHandler)
GrCapInitialize 是这样的:
Public Declare Function GrCapInitialize Lib "GrFinger.dll" Alias "_GrCapInitialize@4" (ByVal StatusEventHandler As Integer) As Integer
并且GrCapStatusEventHandler是:
Public Sub GrCapStatusEventHandler(ByVal pidSensor As Integer, ByVal eventRaised As Integer)
While fireStatus = True
System.Windows.Forms.Application.DoEvents()
End While
myPIdSensor = pidSensor
myEventRaised = eventRaised
fireStatus = True
While fireStatus = True
System.Windows.Forms.Application.DoEvents()
End While
End Sub
我不确定如何重写它以解决以下问题:
Error 44 'AddressOf' expression cannot be converted to 'Integer' because 'Integer' is not a delegate type.
第二个所说的修饰是这段代码:
GrCapStartCapture(myIdSensor, AddressOf GrCapFingerEventHandler, AddressOf GrCapImageEventHandler)
再说一遍,AddressOf ... 是其中的错误:
GrCapFingerEventHandler:
Public Sub GrCapFingerEventHandler(ByVal pidSensor As Integer, ByVal eventRaised As Integer)
While fireFinger = True
System.Windows.Forms.Application.DoEvents()
End While
myPIdSensor = pidSensor
myEventRaised = eventRaised
fireFinger = True
While fireFinger = True
System.Windows.Forms.Application.DoEvents()
End While
End Sub
和GrCapImageEventHandler:
Public Sub GrCapImageEventHandler(ByVal pidSensor As Integer, ByVal width As Integer, ByVal height As Integer, ByVal pRawImage As Integer, ByVal res As Integer)
While fireImage = True
System.Windows.Forms.Application.DoEvents()
End While
myPIdSensor = pidSensor
myWidth = width
myHeight = height
myRes = res
myRawImage = pRawImage
fireImage = True
While fireImage = True
System.Windows.Forms.Application.DoEvents()
End While
End Sub
再次,错误是:
Error 44 'AddressOf' expression cannot be converted to 'Integer' because 'Integer' is not a delegate type.
任何人都可以帮我将这 2 个代码区域转换为 .net 吗?
最佳答案
在 VB6 中,传递给非托管函数的Integer
将是函数指针。 VB.NET 不支持函数指针。 .NET 使用委托(delegate),即引用方法的对象。这意味着您需要一个具有与托管方法匹配的签名的委托(delegate)类型,然后您可以将非托管函数的参数声明为该类型,并在调用该函数时传递该类型的实例。您可以声明自己的委托(delegate)类型,例如
Public Delegate Sub GrCapStatusCallback(ByVal pidSensor As Integer, ByVal eventRaised As Integer)
声明您的外部函数使用该类型:
Public Declare Function GrCapInitialize Lib "GrFinger.dll" Alias "_GrCapInitialize@4" (ByVal StatusEventHandler As GrCapStatusCallback) As Integer
然后您的调用应该按原样工作,或者您可以显式创建委托(delegate)实例:
InitializeGrCap = GrCapInitialize(New GrCapStatusCallback(AddressOf GrCapStatusEventHandler))
或者,您可以使用现有的 Action
和 Func
委托(delegate),它们分别用于 Subs
和 Functions
并且可以支持0到16个参数:
Public Declare Function GrCapInitialize Lib "GrFinger.dll" Alias "_GrCapInitialize@4" (ByVal StatusEventHandler As Action(Of Integer, Integer)) As Integer
关于vb.net - VS 2008 中的 VB6 AddressOf 和回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45094306/
我需要以一种或另一种方式将 groupID(和另一个整数)链接到我动态添加的按钮。有什么想法吗? 我可以做什么; AddHandler mybutton.Click, AddressOf PrintM
关于我的other question 如何获取 CFuncType 对象的地址(实际函数指针)? addressof() 没有报告正确的地址。 C 代码: extern "C" _declspec(d
我有一个算法,可以将指针转换为类 std::vector input; std::vector ptrs; std::vector output; 所以为了获得ptrs我做 transform(i
所以几天前我了解了 std::addressof。在 http://en.cppreference.com/w/cpp/memory/addressof给出了一个可能的实现: template T*
出于某些教育原因,我通过将引用运算符 & 重载为已删除的成员函数或作为 private 方法,设法阻止其他人获取我的类对象的地址.但是 C++11 提供了一个新的模板化函数 std::addresso
我需要在我正在开发的类中使用多个 Windows API 函数,用于一个业余爱好项目。其中几个函数需要使用 AddressOf 运算符,但根据Microsoft Documentation ,禁止在类
我想运行一个简单的代码段,但每次 Access 和 Excel 都会崩溃。 我正在运行 CallbackTest2,你能帮帮我吗?谢谢分配。 Declare Function CallWindowPr
这个问题已经有答案了: What type of address returned on applying ampersand to a variable or a data type in C/C+
如果我没有编译代码,我会说 1 和 2 给出相同的结果,因为它们都有一个 int指针p指向变量age。在 1 和 2 中取消引用 age 应该会得到相同的结果。我还知道 3 只会给我变量 age 的第
我怎样才能使下面的代码工作? for (auto f=face.begin(); f!=face.end(); ++f) { if (std::addressof(*f) == 0x18b91
我可能在这里遗漏了一些东西。我需要存储新分配的内存块的指针地址。 我这样做: void* buffer = _aligned_malloc(4096,4); assert(buffer
这个问题在这里已经有了答案: Is pointer arithmetic on inactive member of a union UB? (2 个答案) 关闭 4 年前。 下面的代码尝试在 C+
任何人都可以帮我解决 C# 中关于 VB6 中的 AddressOf 运算符 的替代解决方案吗? AddressOf 返回一个长值。我可以通过什么方式获取 C# 中的输出? 最佳答案 扩展 Harpe
我需要写一个 constexpr addressof 函数,但我觉得不可能。有谁知道这是否可能? cppreference.com 中的引用实现: template T* addressof(T& a
Clang 和 GCC(MSVC 除外)在模板参数传递时无法解析 std::addressof作为模板函数的参数。以下是此类错误的示例: std::vector v{1,2,3,4,5}; std::
sizeof(long) 返回 8 个字节,但 &along(long 的地址)是 12 个十六进制数字(48 位)或 6 个字节。在使用 clang 编译的 OS X 64 位上。这里有差异还是这是
代码: public Thread ThreadReceive; ThreadReceive = New System.Threading.Thread(AddressOf ReceiveMessag
在获取对象的地址时,如何确定是否需要 addressof(x) 而不是 &x? 似乎这个问题令人困惑,所以需要澄清一下: addressof 显然绕过了重载的地址操作符。 我已经知道了。 我想知道的是
我在将我的 VB6 项目转换为 VB.NET 时遇到了一些问题 我不明白这个“AddressOf”函数在 VB.NET 中应该如何 我的 VB6 代码: Declare Function MP4_Cl
我正在使用std::cout进行日志记录,并且当“请勿使用'cout'的地址,而是从lambda调用它的地址“时,sonarqube报告错误。 std::ostream *streamp; strea
我是一名优秀的程序员,十分优秀!