Re: Sorry - basic Q about using char[] instead of CString
"Jethro_uk" <none@none.com> ha scritto nel messaggio
news:aT5Ui.94317$lV4.83151@fe2.news.blueyonder.co.uk...
Unfortunately it's a 3rd party DLL, so I haven't got the code. But it
works in VB if I declare it :
Declare MyFunc Lib "MyLib.DLL" (ByVal param1 as string, byVal param2 as
string, byRef param3 as integer, byRef param4 as string) as integer
So AFAIAC it's a working function.
I've developed a test to simulate your problem, you may consider download
the C-interface DLL and the testing Visual Basic 6 client here:
http://www.geocities.com/giovanni.dicanio/vc/TestCAndVBStringDll.zip
There is the C++ code taken from the DLL in the project:
(Note that I use __stdcall calling convention.
Note also that, even if VB6 stores strings in Unicode (UTF-16) internally,
it converts them to ANSI (MBCS) before passing them to the C-interface DLL;
instead, VB6 mantains the Unicode encoding for strings when they are passed
in COM via BSTR.)
<code>
// ------------------------------------------------------------------
// Test function, exported by this DLL, and called
// from Visual Basic 6.
// ------------------------------------------------------------------
short __stdcall TestVBStrings(
LPCSTR param1, // ByVal param1 As String
LPCSTR param2, // ByVal param2 As String
short * param3, // ByRef param3 As Integer
LPCSTR * param4 // ByRef param4 As String
)
{
// Check parameters
_ASSERTE( param1 != NULL );
_ASSERTE( param2 != NULL );
_ASSERTE( param3 != NULL );
_ASSERTE( param4 != NULL );
// Output parameters to message-box
std::ostringstream os;
os << "Parameters:\n"
<< std::string( param1 ) << "\n"
<< std::string( param2 ) << "\n"
<< (*param3) << "\n"
<< std::string( *param4 ) << "\n";
::MessageBox( NULL, os.str().c_str(), "DLL C++ <-> VB Test", MB_OK |
MB_ICONINFORMATION );
// Double the I/O integer
short n = *param3;
*param3 = 2 * n;
// Return old input integer value
return n;
}
</code>
Giovanni