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