C ++函数指向VB.Net的指针 [英] C++ Function Pointer to VB.Net

查看:67
本文介绍了C ++函数指向VB.Net的指针的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

对所有大师来说,


我目前正在将一些C ++代码转换为VB.net


C ++代码如下:


================= C ++ CODE ================== br />
typedef struct _tagBBCameraParameter

{

unsigned int preview_width;

unsigned int preview_height;

unsigned int preview_x;

unsigned int preview_y;

unsigned int preview_format;

unsigned int preview_zoom;


const TCHAR * capture_file_name;


unsigned int contrast;

unsigned int saturation;

unsigned int brightness;


} BBCameraParameter;


typedef LPVOID HBBCAMERA;


BBAPI DWORD WINAPI BBCameraPreviewStart(HBBCAMERA,

BBCameraParameter *);

BBAPI DWORD WINAPI BBCameraPreviewStop(HBBCAMERA);


============ =====结束C ++代码==================


我成功了将大部分代码转换为VB.Net,但当我尝试使用时,我会尝试使用BBCameraPreviewStart函数,它会产生错误。


''====== ===========部分VB.Net代码

公共共享功能BBCameraPreviewStart(ByVal HBBCamera As IntPtr,

ByRef BBParam1 As BBCameraParameter)As Integer

结束功能


公共共享功能BBCameraPreviewStop(ByVal HBBCamera作为IntPtr)

作为整数

结束功能


''===========部分VB.NET代码结束


这就是我通过的方式参数;


Dim BBParam为BBCameraParameter''//已经宣布但未显示

这里

Dim HBBCamera为IntPtr' '//句柄


''我没有问题得到处理但是一旦我设置参数为

BBParam并传递如下,我得到错误(不是来自

消息的帮助。


BBCameraPreviewStart(HBBCAMERA,BBParam)


如何正确调用BBCameraPreviewStart函数?我这样做了吗?

正确吗?


请建议。

谢谢

解决方案

banleong写道:

< snip>


我目前正在将部分C ++代码转换为VB.net



< snip>


BBAPI DWORD WINAPI BBCameraPreviewStart(HBBCAMERA,

BBCameraParameter *);

BBAPI DWORD WINAPI BBCameraPreviewStop(HBBCAMERA) ;


=================结束C ++代码================= =


我设法将大部分代码转换为VB.Net,但是当我尝试使用B
BBCameraPreviewStart函数时,它会给出错误。


''=================部分VB.Net代码


公共共享功能BBCameraPreviewStart(ByVal HBBCamera作为IntPtr,

ByRef BBParam1作为BBCameraParameter)作为整数

结束函数


公共共享功能BBCameraPreviewStop(ByVal HBBCamera作为IntPtr )

作为整数

结束函数



< snip>


不要那些需要申报外部图书馆而不是当地的

方法吗?


类似于:

声明功能BBC ameraPreviewStart Lib" ???" (_

ByVal HBBCamera作为IntPtr,

ByRef BBParam1作为BBCameraParameter)作为整数

声明函数BBCameraPreviewStop Lib" ???" (_

ByVal HBBCamera作为IntPtr)作为整数

HTH。


问候,


Branco。


我认为函数指针被替换(至少在功能上)由

委托。我不完全确定你想要做什么,所以我

不能轻易地建议任何代码,但也许可以考虑使用代表

而不是函数指针。


你得到什么样的错误?


Branco,


是的,它是外部库。


Lord Zoltar,

基本上,当我试图按如下方式传递参数时这个

函数,我收到错误:


BBCameraPreviewStart(HBBCAMERA,BBParam)


其中HBBCamera是处理程序和BBParam是BBCameraParameter的结构

声明。


我认为获得处理程序没有问题,因为我可以调用

其他功能,如通过传递处理程序获取相机信息

(此处未显示的功能)。


所以,我假设可能有我声明结构的方式或传递导致BBParam的
参数错误。


也许我应该将问题分解为:

1)我的声明是否适用于VB.net代码中的BBCameraPreviewStart

基于C ++代码?

BBAPI DWORD WINAPI BBCameraPreviewStart(HBBCAMERA,

BBCameraParameter *);


to


公共共享功能BBCameraPreviewStart(ByVal HBBCamera As IntPtr,

ByRef BBParam1 As BBCameraParameter)As Integer

结束功能


2)在调用BBCameraPreviewStart

函数时,我是否正确传递参数?以下是我的程序


Dim BBParam作为BBCameraParameter''声明变量来保持

BBCameraParameter结构

随着BBParam

.preview_width = 0

.preview_height = 100

.preview_format = 0

.ImageQuality = 5

.brightness = 5

.rotation = rotation_degree.rotate_0

.preview_x = 0

.preview_y = 0

.contrast = 200

.saturation = 200

.ef_mode = effect_mode.effect_none

.wb_mode = white_balance_mode.wb_auto

Dim pbuffer()As Byte

ReDim pbuffer(.preview_width * .preview_height * 2)

ReDim .reserved(20)

.p_app_buffer = pbuffer

.p_app_capture_buffer = pbuffer


结束


''通话功能
BBCameraPreviewStart(Handler,BBParam)


我在这里做对了吗?


谢谢和问候


To all gurus,

I am currently converting some of C++ codes to VB.net

The C++ Codes is as follows :

================= C++ CODE ==================
typedef struct _tagBBCameraParameter
{
unsigned int preview_width;
unsigned int preview_height;
unsigned int preview_x;
unsigned int preview_y;
unsigned int preview_format;
unsigned int preview_zoom;

const TCHAR* capture_file_name;

unsigned int contrast;
unsigned int saturation;
unsigned int brightness;

} BBCameraParameter;

typedef LPVOID HBBCAMERA;

BBAPI DWORD WINAPI BBCameraPreviewStart(HBBCAMERA,
BBCameraParameter*);
BBAPI DWORD WINAPI BBCameraPreviewStop(HBBCAMERA);

================= END C++ CODE ==================

I managed to convert most of the codes to VB.Net but when I try to fun
BBCameraPreviewStart function, it gives error.

''=================Partial VB.Net Code
Public Shared Function BBCameraPreviewStart(ByVal HBBCamera As IntPtr,
ByRef BBParam1 As BBCameraParameter) As Integer
End Function

Public Shared Function BBCameraPreviewStop(ByVal HBBCamera As IntPtr)
As Integer
End Function

''=========== END OF PARTIAL VB.NET CODES

This is how i pass the parameters;

Dim BBParam as BBCameraParameter ''// already declared but not shown
here
Dim HBBCamera as IntPtr ''//Handle

''I have no problems getting handle but once i set the parameters for
BBParam and pass as follows, i get error (not much help from the
message).

BBCameraPreviewStart(HBBCAMERA, BBParam)

How do I call function BBCameraPreviewStart correctly? Did i do it
correctly?

Please advices.
Thanks

解决方案

banleong wrote:
<snip>

I am currently converting some of C++ codes to VB.net

<snip>

BBAPI DWORD WINAPI BBCameraPreviewStart(HBBCAMERA,
BBCameraParameter*);
BBAPI DWORD WINAPI BBCameraPreviewStop(HBBCAMERA);

================= END C++ CODE ==================

I managed to convert most of the codes to VB.Net but when I try to fun
BBCameraPreviewStart function, it gives error.

''=================Partial VB.Net Code

Public Shared Function BBCameraPreviewStart(ByVal HBBCamera As IntPtr,
ByRef BBParam1 As BBCameraParameter) As Integer
End Function

Public Shared Function BBCameraPreviewStop(ByVal HBBCamera As IntPtr)
As Integer
End Function

<snip>

Don''t those need to be Declares to external libraries instead of local
methods?

Something like:

Declare Function BBCameraPreviewStart Lib "???" ( _
ByVal HBBCamera As IntPtr,
ByRef BBParam1 As BBCameraParameter) As Integer
Declare Function BBCameraPreviewStop Lib "???" ( _
ByVal HBBCamera As IntPtr) As Integer
HTH.

Regards,

Branco.


I think function pointers are replaced (at least functionally) by
delegates. I''m not entirely sure what you''re trying to do her, so I
can''t suggest any code easily, but maybe look into using delegates
instead of function pointers.

What kind of error are you getting?


Branco,

Yes, it is external libraries.

Lord Zoltar,
Basically, when i tried to pass the parameter as follows in this
function, i got error:

BBCameraPreviewStart(HBBCAMERA, BBParam)

where HBBCamera is the handler and BBParam is the struction
declaration of BBCameraParameter.

I assume there is not problem getting the handler because I can call
other functions like getting camera info by passing the handler
(function not shown here).

So, I assume there could be the way I declare the structure or passing
parameters of BBParam that causes the error.

Perhaps i should break down by questions to:
1) Is my declaration correct for BBCameraPreviewStart in VB.net code
based on the C++ codes?

BBAPI DWORD WINAPI BBCameraPreviewStart(HBBCAMERA,
BBCameraParameter*);

to

Public Shared Function BBCameraPreviewStart(ByVal HBBCamera As IntPtr,
ByRef BBParam1 As BBCameraParameter) As Integer
End Function

2) Did i pass the parameter correct when calling BBCameraPreviewStart
function? Below are my procedure

Dim BBParam As BBCameraParameter ''Declare variable to hold
BBCameraParameter structure
With BBParam
.preview_width = 0
.preview_height = 100
.preview_format = 0
.ImageQuality = 5
.brightness = 5
.rotation = rotation_degree.rotate_0
.preview_x = 0
.preview_y = 0
.contrast = 200
.saturation = 200
.ef_mode = effect_mode.effect_none
.wb_mode = white_balance_mode.wb_auto
Dim pbuffer() As Byte
ReDim pbuffer(.preview_width * .preview_height * 2)
ReDim .reserved(20)
.p_app_buffer = pbuffer
.p_app_capture_buffer = pbuffer

End With

''Call function
BBCameraPreviewStart (Handler, BBParam)

Am i doing the right thing here?

Thanks and Regards


这篇关于C ++函数指向VB.Net的指针的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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