Un esempio:
abbiamo una dll chiamata "Dll.dll" che esporta una funzione chiamata "Messaggio" nelle due versioni ANSI e UNICODE:
Dll.h
codice:
#ifndef _MyDll_H
#define _MyDll_H
#ifdef DLL_EXPORTS
#define DLL_API __declspec(dllexport)
#else
#define DLL_API __declspec(dllimport)
#endif
#ifdef __cplusplus
extern "C" {
#endif
extern DLL_API int nDll;
DLL_API void WINAPI MessaggioW(LPCWSTR szMsg);
DLL_API void WINAPI MessaggioA(LPCSTR szMsg);
#ifdef UNICODE
#define Messaggio MessaggioW
#else
#define Messaggio MessaggioA
#endif
#ifdef __cplusplus
}
#endif
#endif // _MyDll_H
Dll.cpp
codice:
#include "stdafx.h"
#define DLL_EXPORTS
#include "Dll.h"
#ifdef _MANAGED
#pragma managed(push, off)
#endif
BOOL APIENTRY DllMain( HMODULE 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;
}
#ifdef _MANAGED
#pragma managed(pop)
#endif
DLL_API void WINAPI MessaggioW(LPCWSTR szMsg)
{
WCHAR szTemp[1024];
++nDll;
swprintf_s(szTemp, sizeof(szTemp), L"Chiamata UNICODE\n\nMessaggio n° %d:\n%s", nDll, szMsg);
::MessageBoxW(NULL, szTemp, L"Messaggio", MB_OK);
}
DLL_API void WINAPI MessaggioA(LPCSTR szMsg)
{
CHAR szTemp[1024];
++nDll;
sprintf_s(szTemp, sizeof(szTemp), "Chiamata ANSI\n\nMessaggio n° %d:\n%s", nDll, szMsg);
::MessageBoxA(NULL, szTemp, "Messaggio", MB_OK);
}
Per chiamare la funzione da VB6 basta usare l'enunciato Declare:
Form1.vb
codice:
Public Class Form1
Private Declare Unicode Sub MessaggioW Lib "Dll.dll" (ByVal str As String)
Private Declare Ansi Sub MessaggioA Lib "Dll.dll" (ByVal str As String)
Private Declare Auto Sub Messaggio Lib "Dll.dll" (ByVal str As String)
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
' Chiama la funzione generica
Messaggio("Ciao a tutti")
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
' Chiama la funzione Ansi
MessaggioA("Sabbenerica a tutti")
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
' Chiama la funzione Unicode
MessaggioW("Ciao")
End Sub
End Class
La dll deve trovarsi nella cartella di sistema di Windows o nella stessa cartella dell'eseguibile.