委托的使用 [英] Use of delegate

查看:72
本文介绍了委托的使用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我和代表们很难相处,但在这里我必须传递一个代表并且

指向一个结构的指针。我完全迷失了。将指针传递给

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆