Re[3]: Как получить строку из DLL на VB6
От: Бенедикт  
Дата: 13.12.06 11:17
Оценка: +1
Разжёвано здесь.

Строки VB имеют тип BSTR.

Declare Function означает, что функция возвращает тип Variant (хотя здесь это неважно).

VBStr.h:
int WINAPI cppTEXT(LPWSTR pStr);
int WINAPI cppTEXT2(LPSTR pStr);


VBStr.cpp:
#include "stdafx.h"
#include "VBStr.h"

BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
                     )
{
    switch (ul_reason_for_call)
    {
        case DLL_PROCESS_ATTACH:
        case DLL_THREAD_ATTACH:
        case DLL_THREAD_DETACH:
        case DLL_PROCESS_DETACH:
            break;
    }
    return TRUE;
}

int WINAPI cppTEXT(LPWSTR pStr)
{
    wcscpy(pStr, L"У попа была собака");
    return wcslen(pStr);
}

int WINAPI cppTEXT2(LPSTR pStr)
{
    strcpy(pStr, "У пыпа была собака");
    return strlen(pStr);
}


VBStr.def
      LIBRARY   VBSTR

      EXPORTS
      cppTEXT            @1 
      cppTEXT2            @2


Form1.frm:
Option Explicit

Private Declare Function cppTEXT Lib "VBStr.DLL" (ByVal STRAddr As Long) As Long

Private Declare Function cppTEXT2 Lib "VBStr.DLL" (ByVal STR As String) As Long

Function MYTEXT() As String
 Dim MyStr As String
 MyStr = String$(255, vbNullChar)
 MYTEXT = Left$(MyStr, cppTEXT(StrPtr(MyStr)))
End Function

Function MYTEXT2() As String
 Dim MyStr As String
 MyStr = String$(255, vbNullChar)
 MYTEXT2 = Left$(MyStr, cppTEXT2(MyStr))
End Function

Private Sub Command1_Click()
 Label1.Caption = "<<" & MYTEXT() & ">>"
 Label2.Caption = "<" & MYTEXT2() & ">"
End Sub
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.