Source


-----DLL側のソース----
ファイル名:ForVbDll.h
#ifdef FORVBDLL_EXPORTS
#define FORVBDLL_API __declspec(dllexport)
#else
#define FORVBDLL_API __declspec(dllimport)
#endif

//
//エクスポートされた関数のプロトタイプ宣言
//
//(Visual Basic呼び出すための手続き)
#ifdef __cplusplus
extern "C" {
#endif

FORVBDLL_API LONG __stdcall FuncForVB( LPCSTR strData, LONG longData );

#ifdef __cplusplus
}
#endif

ファイル名:ForVbDll.cpp
#include "stdafx.h"
#include "ForVbDll.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;
}

//VBから呼び出される関数
FORVBDLL_API LONG __stdcall FuncForVB( LPCSTR strData, LONG longData )
{
return 1000;
}

------呼び出し側のVBコード-----
'API宣言
Private Declare Function FuncForVB Lib "ForVbDll.dll" Alias "_FuncForVB@8" _
(ByVal strData As String, ByVal longData As Long) As Long

Private Sub Command1_Click()

'Dllを呼び出す
Text1.Text = FuncForVB("a", 100)

End Sub

PS. DLL側でDEFファイルを使用することにより
[VC]
#ifdef __cplusplus
extern "C" {
#endif
[VB]
Alias " "
を必要なくす方法もある。