mercredi 25 mars 2015

Cannot get a BSTR in VB6 dll from a referenced C++ dll


Let me start off by saying that VB is not my strong suit. I am developing a C++ dll to be used in a VB6 application's dll.


I have successfully instantiated the (C++) classes in VB. I am trying to access data members of the class using this syntax: "vbCppObj.dataMemberName". I can confirm that this works for boolean and enum types and it invokes the getter methods defined in my class.


I have to access a string from the (C++) class as well. The getter function for the string is given below:



class MyCPPClass
{
private:
WCHAR* CPPErrorString = L"This is a string";

public:
HRESULT __stdcall get_CPPErrorString(BSTR* pVal)
{
BSTR str = ::SysAllocString(CPPErrorString);
if(str)
*pVal = str;
return S_OK;
}
};


I am unable to debug the C++ dll right now.


I access this value in the VB6 code as follows:



ErrorString = vbCppObj.CPPErrorString
Logger.log "[Log]:" & ErrorString


"ErrorString" is a String type in VB. When this line executes, the "ErrorString" object shows "" (when I hover over it). If I step further, to the logging code, it gives me a "Error 14: Out of string space".


Also, I have typed this code in the browser so, it may not be 100% correct.




Aucun commentaire:

Enregistrer un commentaire