Разжёвано
здесь.
Строки 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