C++代码转VB代码

huangjinghai 2011-02-12 03:59:20
精通C++与VB语言的牛人帮帮我吧,整了很久都做不出来.
函数SSC_RestoreVal是C++写的DLL里的函数.
//C++代码
//头文件定义
SSC_RestoreVal(const wchar_t* tag, unsigned char** value, unsigned long* valSize);
//函数应用
void RestoreValue()
{
BYTE* valueBuffer = NULL;
DWORD valueBufferSize = 0;
string val;

wstring tag;
wcout << L"Enter value tag name to restore: ";
getline(wcin, tag);

//restore saved value
SscRc rc = SSC_RestoreVal(tag.c_str(), &valueBuffer, &valueBufferSize);
if(S_SSCRC_OK(rc))
{
val.assign((const char*)valueBuffer, valueBufferSize);
wcout << tag <<L" value is: ";
cout << val << endl;
}
else
{
wcout << L"Unable to get requested value: " << rc << endl;
}

//free the buffer
SSC_SecureFreeValBuffer(valueBuffer, valueBufferSize);
valueBuffer = NULL;

return;
}


//VB代码
//函数定义
Public Declare Function SSC_RestoreVal Lib "SscApi.dll" (ByVal tag As String, ByVal Value As String, ByVal valSize As Long)
//应用
Private Sub A_RestoreV_Click()
Dim valueBuffer As String
Dim valueBufferSize As Long
Dim tag As String
Dim val As String
Dim rc As Enum_SscRc
On Error GoTo RestoreError
valueBufferSize = 0
valueBuffer = ""
tag = "abra"
rc = SSC_RestoreVal(tag, VarPtr(valueBuffer), VarPtr(valueBufferSize))
If (S_SSCRC_OK(rc)) Then
' val.assign valueBuffer, valueBufferSize
'CopyMemory val, valueBuffer, valueBufferSize
MsgBox tag & " Value is:" & valueBuffer
Else
MsgBox "Unable to get requested value: "
End If

txtReStoreValue.Text = "valueBuffer:" & CStr(valueBuffer) & " valueBufferSize:" & CStr(valueBufferSize) & " val:" & val

' SSC_SecureFreeValBuffer valueBuffer , valueBufferSize
RestoreError:
MsgBox Err.Description
End Sub


C++代码可正常运行并得到正确结果,但改写为VB后,能获取到值的长度(valueBufferSize),但获取不到值(即:valueBuffer="").
...全文
318 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
huangjinghai 2011-02-15
  • 打赏
  • 举报
回复
谢谢楼上的,成功了.
Lactoferrin 2011-02-14
  • 打赏
  • 举报
回复
再试试


Public Declare Function SSC_RestoreVal Lib "SscApi.dll" (ByVal tag As Long, ByRef Value As Long, ByRef valSize As Long)
Declare Function MultiByteToWideChar Lib "kernel32.dll" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpMultiByteStr As Long, ByVal cchMultiByte As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long) As Long
Private Sub A_RestoreV_Click()
Dim ValueBuffer as String
Dim pvalueBuffer As Long
Dim valueBufferSize As Long,ct as long
Dim tag As String
Dim val As String
Dim rc As Enum_SscRc
On Error GoTo RestoreError
valueBufferSize = 0
valueBuffer = ""
tag = "abra"
rc = SSC_RestoreVal(StrPtr(tag), pvalueBuffer, valueBufferSize)

ct=MultiByteToWideChar(0,1,pvalueBuffer,valueBufferSize,StrPtr(valueBuffer),0)
valueBuffer=Space(ct)
MultiByteToWideChar(0,1,pvalueBuffer,valueBufferSize,StrPtr(valueBuffer),ct)
If (S_SSCRC_OK(rc)) Then
' val.assign valueBuffer, valueBufferSize
'CopyMemory val, valueBuffer, valueBufferSize
MsgBox tag & " Value is:" & valueBuffer
Else
MsgBox "Unable to get requested value: "
End If

txtReStoreValue.Text = "valueBuffer:" & valueBuffer & " valueBufferSize:" & Str(valueBufferSize) & " val:" & val

' SSC_SecureFreeValBuffer pvalueBuffer , valueBufferSize
RestoreError:
MsgBox Err.Description
End Sub
huangjinghai 2011-02-14
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 lactoferrin 的回复:]
你这样
declare function MessageBoxA lib "user32.dll" (byval h as long,byval t as long,byval c as long,byval f as long) as long

然后
MessageBoxA(0,pvalueBuffer,0,0)
看能不能显示出来
[/Quote]
这对话框中得出了正确的值,这怎么弄?
Lactoferrin 2011-02-14
  • 打赏
  • 举报
回复
要不你把那个dll发上来
huangjinghai 2011-02-14
  • 打赏
  • 举报
回复
就是DLL调用的问题.下面这几个函数都是C++写的动态库,现在要在VB里面引用,这人都被拨了层皮还没弄出来.

SscRc SSC_RestoreVal(const wchar_t* tag, unsigned char** value, unsigned long* valSize);

SscRc SSC_StoreFile(const wchar_t* tag, const wchar_t* rpath);

void SSC_SecureFreeValBuffer(unsigned char* ptrToBuffer, unsigned long bufferSize);

这些转为VB然后再调用.更痛苦的是我对VB和C++都不熟.
Lactoferrin 2011-02-14
  • 打赏
  • 举报
回复
你这样
declare function MessageBoxA lib "user32.dll" (byval h as long,byval t as long,byval c as long,byval f as long) as long

然后
MessageBoxA(0,pvalueBuffer,0,0)
看能不能显示出来
波导终结者 2011-02-14
  • 打赏
  • 举报
回复
做成DLL,VB调用。C++转VB很蛋疼,我之前转过一个,后来也干脆用DLL。
huangjinghai 2011-02-14
  • 打赏
  • 举报
回复
麻烦问一句,
val.assign valueBuffer, valueBufferSize

转换为VB里面是怎么个用法?应该是这一句的问题.
我对它的理解是从内存地址valueBuffer中取长度为valueBufferSize的字体
huangjinghai 2011-02-14
  • 打赏
  • 举报
回复
还是valueBuffer还是为空,我看了一下,pvalueBuffer的值为35007352,valueBufferSize长度是正确的.
Lactoferrin 2011-02-14
  • 打赏
  • 举报
回复

看这样行不行

Public Declare Function SSC_RestoreVal Lib "SscApi.dll" (ByVal tag As Long, ByRef Value As Long, ByRef valSize As Long)
Declare Function MultiByteToWideChar Lib "kernel32.dll" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpMultiByteStr As Long, ByVal cchMultiByte As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long) As Long
//应用
Private Sub A_RestoreV_Click()
Dim ValueBuffer as String
Dim pvalueBuffer As Long
Dim valueBufferSize As Long
Dim tag As String
Dim val As String
Dim rc As Enum_SscRc
On Error GoTo RestoreError
valueBufferSize = 0
valueBuffer = ""
tag = "abra"
rc = SSC_RestoreVal(StrPtr(tag), pvalueBuffer, valueBufferSize)
valueBuffer=Space(valueBufferSize)
MultiByteToWideChar(0,0,pvalueBuffer,valueBufferSize,StrPtr(valueBuffer),valueBufferSize)
If (S_SSCRC_OK(rc)) Then
' val.assign valueBuffer, valueBufferSize
'CopyMemory val, valueBuffer, valueBufferSize
MsgBox tag & " Value is:" & valueBuffer
Else
MsgBox "Unable to get requested value: "
End If

txtReStoreValue.Text = "valueBuffer:" & CStr(valueBuffer) & " valueBufferSize:" & CStr(valueBufferSize) & " val:" & val

' SSC_SecureFreeValBuffer valueBuffer , valueBufferSize
RestoreError:
MsgBox Err.Description
End Sub
huangjinghai 2011-02-14
  • 打赏
  • 举报
回复
还是一样的,获取不到值啊.
Lactoferrin 2011-02-12
  • 打赏
  • 举报
回复
掉了一个
Public Declare Function SSC_RestoreVal Lib "SscApi.dll" (ByVal tag As long, ByVal Value As long, ByVal valSize As Long)
Lactoferrin 2011-02-12
  • 打赏
  • 举报
回复
ByVal tag As String不对
ByVal tag As long

Dim p as long
valueBuffer =strconv(valueBuffer ,vbFromUnicode)
p=StrPtr(valueBuffer)
SSC_RestoreVal(StrPtr(tag), VarPtr(p), VarPtr(valueBufferSize))

1,488

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧