委托的使用 [英] Use of delegate
问题描述
我和代表们很难相处,但在这里我必须传递一个代表并且
指向一个结构的指针。我完全迷失了。将指针传递给
rlistsys_resp_func和RLISTSYS_DETAIL是我丢失的地方。任何暗示都会受到高度赞赏。
C标题:
_declspec(dllexport)extern void rlistsys(RLISTSYS_PARMS * rlistsys_parms,
RLISTSYS_RESP * rlistsys_resp,void(* rlistsys_resp_func)(RLISTSYS_DETAIL
*));
VB.NET
Dim RLISTSYS_DETAIL为新TRLISTSYS_DETAIL
Dim objDelegate为RLISTSYS_FUNC
objDelegate = AddressOf RLISTSYS_FUNC_RUN
rlistsys(RLISTSYS_PARMS,RLISTSYS_RESP,objDelegate,RLISTSYS_DETAIL )
Module1
Public Delegate Sub RLISTSYS_FUNC(ByRef RLISTSYS_DETAIL As
TRLISTSYS_DETAIL)
Public Sub RLISTSYS_FUNC_RUN(ByRef RLISTSYS_DETAIL为TRLISTSYS_DETAIL)
frmMain.grd.Rows.Add(CleanInput(RLISTSYS_DETAIL.na me),CleanInput
(RLISTSYS_DETAIL.description))
End Sub
公共声明功能rlistsys Lib" remotapi.dll" (ByRef RLISTSYS_PARMS
作为TRLISTSYS_PARMS,ByRef RLISTSYS_RESP作为TRLISTSYS_RESP,ByRef
objDelegate作为RLISTSYS_FUNC,ByRef RLISTSYS_DETAIL作为TRLISTSYS_DETAIL)作为
整数
错误:
System.ArgumentException未处理
消息=&无法封送类型,因为嵌入的长度
数组实例与布局中声明的长度不匹配。
Source =" Chainlinkwork"
StackTrace:
在Chainlinkwork.Module1.rlistsys(TRLISTSYS_PARMS& RLISTSYS_PARMS,
TRLISTSYS_RESP& RLISTSYS_RESP,RLISTSYS_FUNC& objDelegate,TRLISTSYS_DETAIL&
RLISTSYS_DETAIL)
I am having a hard time with delegates, but here I must pass a delegate and
a pointer to a structure. I am totally lost. Passing the pointer to
rlistsys_resp_func and RLISTSYS_DETAIL is where I am lost. Any hint would
be highly appreciated.
C Header:
_declspec(dllexport) extern void rlistsys(RLISTSYS_PARMS *rlistsys_parms,
RLISTSYS_RESP *rlistsys_resp, void (*rlistsys_resp_func)(RLISTSYS_DETAIL
*));
VB.NET
Dim RLISTSYS_DETAIL As New TRLISTSYS_DETAIL
Dim objDelegate As RLISTSYS_FUNC
objDelegate = AddressOf RLISTSYS_FUNC_RUN
rlistsys(RLISTSYS_PARMS, RLISTSYS_RESP, objDelegate, RLISTSYS_DETAIL)
Module1
Public Delegate Sub RLISTSYS_FUNC(ByRef RLISTSYS_DETAIL As
TRLISTSYS_DETAIL)
Public Sub RLISTSYS_FUNC_RUN(ByRef RLISTSYS_DETAIL As TRLISTSYS_DETAIL)
frmMain.grd.Rows.Add(CleanInput(RLISTSYS_DETAIL.na me), CleanInput
(RLISTSYS_DETAIL.description))
End Sub
Public Declare Function rlistsys Lib "remotapi.dll" (ByRef RLISTSYS_PARMS
As TRLISTSYS_PARMS, ByRef RLISTSYS_RESP As TRLISTSYS_RESP, ByRef
objDelegate As RLISTSYS_FUNC, ByRef RLISTSYS_DETAIL As TRLISTSYS_DETAIL) As
Integer
Error:
System.ArgumentException was unhandled
Message="Type could not be marshaled because the length of an embedded
array instance does not match the declared length in the layout."
Source="Chainlinkwork"
StackTrace:
at Chainlinkwork.Module1.rlistsys(TRLISTSYS_PARMS& RLISTSYS_PARMS,
TRLISTSYS_RESP& RLISTSYS_RESP, RLISTSYS_FUNC& objDelegate, TRLISTSYS_DETAIL&
RLISTSYS_DETAIL)
推荐答案
我试图将其重写为vb.net并且遇到困难
那么你可以重新解决这个问题吗?是否必须写成C部分
?你能解释一下这个目标吗?
与非托管代码的权衡(显然)是灵活性,也许它不能
可以做同样的事情吗?
Bob Simoneau <博********* @ newsgroups.nospam>在消息中写道
news:u0 ************* @ TK2MSFTNGP09.phx.gbl ...
I tried to rewrite that into vb.net and am having difficulty
So can you re-word the problem? does it have to be written as the C part
there? Can you explain the goal?
The tradeoff (apparently) with unmanaged code is flexibility, maybe it cant
be done the same?
"Bob Simoneau" <bo*********@newsgroups.nospam> wrote in message
news:u0*************@TK2MSFTNGP09.phx.gbl...
我很难过与代表,但在这里我必须传递委托
和指向结构的指针。我完全迷失了。将指针传递给
rlistsys_resp_func和RLISTSYS_DETAIL是我丢失的地方。任何暗示都会受到高度赞赏。
C标题:
_declspec(dllexport)extern void rlistsys(RLISTSYS_PARMS * rlistsys_parms,
RLISTSYS_RESP * rlistsys_resp,void(* rlistsys_resp_func) )(RLISTSYS_DETAIL
*));
VB.NET
Dim RLISTSYS_DETAIL为新TRLISTSYS_DETAIL
Dim objDelegate为RLISTSYS_FUNC
objDelegate = AddressOf RLISTSYS_FUNC_RUN > rlistsys(RLISTSYS_PARMS,RLISTSYS_RESP,objDelegate,RLISTSYS_DETAIL)
模块1
公共代表子RLISTSYS_FUNC(ByRef RLISTSYS_DETAIL为
TRLISTSYS_DETAIL)
Public Sub RLISTSYS_FUNC_RUN(ByRef RLISTSYS_DETAIL As TRLISTSYS_DETAIL )
frmMain.grd.Rows.Add(CleanInput(RLISTSYS_DETAIL.na me),CleanInput
(RLISTSYS_DETAIL.description))
End Sub
Public Declare Function rlistsys Lib" remotapi.dll" (ByRef RLISTSYS_PARMS
作为TRLISTSYS_PARMS,ByRef RLISTSYS_RESP作为TRLISTSYS_RESP,ByRef
objDelegate作为RLISTSYS_FUNC,ByRef RLISTSYS_DETAIL作为TRLISTSYS_DETAIL)
作为整数
错误:
<未处理System.ArgumentException
Message =&Type无法编组,因为嵌入的
数组实例的长度与布局中声明的长度不匹配。
Source =Chainlinkwork
StackTrace:
在Chainlinkwork.Module1.rlistsys(TRLISTSYS_PARMS& RLISTSYS_PARMS,
TRLISTSYS_RESP& RLISTSYS_RESP,RLISTSYS_FUNC& objDelegate,
TRLISTSYS_DETAIL& RLISTSYS_DETAIL)
I am having a hard time with delegates, but here I must pass a delegate and a pointer to a structure. I am totally lost. Passing the pointer to
rlistsys_resp_func and RLISTSYS_DETAIL is where I am lost. Any hint would
be highly appreciated.
C Header:
_declspec(dllexport) extern void rlistsys(RLISTSYS_PARMS *rlistsys_parms,
RLISTSYS_RESP *rlistsys_resp, void (*rlistsys_resp_func)(RLISTSYS_DETAIL
*));
VB.NET
Dim RLISTSYS_DETAIL As New TRLISTSYS_DETAIL
Dim objDelegate As RLISTSYS_FUNC
objDelegate = AddressOf RLISTSYS_FUNC_RUN
rlistsys(RLISTSYS_PARMS, RLISTSYS_RESP, objDelegate, RLISTSYS_DETAIL)
Module1
Public Delegate Sub RLISTSYS_FUNC(ByRef RLISTSYS_DETAIL As
TRLISTSYS_DETAIL)
Public Sub RLISTSYS_FUNC_RUN(ByRef RLISTSYS_DETAIL As TRLISTSYS_DETAIL)
frmMain.grd.Rows.Add(CleanInput(RLISTSYS_DETAIL.na me), CleanInput
(RLISTSYS_DETAIL.description))
End Sub
Public Declare Function rlistsys Lib "remotapi.dll" (ByRef RLISTSYS_PARMS
As TRLISTSYS_PARMS, ByRef RLISTSYS_RESP As TRLISTSYS_RESP, ByRef
objDelegate As RLISTSYS_FUNC, ByRef RLISTSYS_DETAIL As TRLISTSYS_DETAIL) As Integer
Error:
System.ArgumentException was unhandled
Message="Type could not be marshaled because the length of an embedded
array instance does not match the declared length in the layout."
Source="Chainlinkwork"
StackTrace:
at Chainlinkwork.Module1.rlistsys(TRLISTSYS_PARMS& RLISTSYS_PARMS,
TRLISTSYS_RESP& RLISTSYS_RESP, RLISTSYS_FUNC& objDelegate, TRLISTSYS_DETAIL& RLISTSYS_DETAIL)
我有很多年前用C编写的DLL。我没有
源代码。我有C头文件,下面有声明。
_declspec(dllexport)extern void rlistsys(RLISTSYS_PARMS * rlistsys_parms,
RLISTSYS_RESP * rlistsys_resp,void(* rlistsys_resp_func) (RLISTSYS_DETAIL
*));
几年前我将标题重新加入Delphi。它的声明是
以下:
函数rlistsys(var INRLISTSYS_PARMS:TRLISTSYS_PARMS; var
INRLISTSYS_RESP:TRLISTSYS_RESP; INListSYSFunc:TRListSysFunc):整数;
cdecl;
现在我的公司正在改用VB.NET 2005,我无法转换
代码
我基本上必须调用rlistsys函数传递两个结构和一个
指向回调函数的指针,该函数将结构作为参数。
" Brad罗杰斯" <峰; br ************* @ yahoo.com>在消息中写道
news:4Bzvf.36
I have a DLL that was written in C many,many years ago. I do not have the
source code. I do have the C header file which has the declaration below.
_declspec(dllexport) extern void rlistsys(RLISTSYS_PARMS *rlistsys_parms,
RLISTSYS_RESP *rlistsys_resp, void (*rlistsys_resp_func)(RLISTSYS_DETAIL
*));
I rewote the header into Delphi several years ago. Its declaration is
below:
function rlistsys(var INRLISTSYS_PARMS: TRLISTSYS_PARMS; var
INRLISTSYS_RESP: TRLISTSYS_RESP; INListSYSFunc: TRListSysFunc): integer;
cdecl;
Now my company is changing to VB.NET 2005 and I am having trouble converting
the code
I basically have to call the rlistsys function passing two structures and a
pointer to a callback function which take a structure as a parameter.
"Brad Rogers" <br*************@yahoo.com> wrote in message
news:4Bzvf.36
ww5.13@trnddc01 ...
ww5.13@trnddc01...
我试图将其重写为vb .net并且遇到了困难
那么你可以重新说出这个问题吗?它必须写成C部分吗?你能解释一下这个目标吗?
与非托管代码的权衡(显然)是灵活性,也许它不能完成同样的工作?
I tried to rewrite that into vb.net and am having difficulty
So can you re-word the problem? does it have to be written as the C part
there? Can you explain the goal?
The tradeoff (apparently) with unmanaged code is flexibility, maybe it
cant
be done the same?
这篇关于委托的使用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!