忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

【2024年04月29日04:38 】 |
DLLの作成方法① VB編
3:46 2002/09/05
 
●VC++を使用して、DLLファイルの作成の仕方。
<<VC++>>
新規作成 → プロジェックトタブ選択 → 
Win32 Dynamic-LInk Libraryを選択 → プロジェックト名にStock01
→ シンボルをエクスポートするを選択OK
①stock00.defを追加、
   変数を書く   引数の数を書く
    ↓  ↓
 str_style                @2
②Hellodll.hを宣言する。
 変数の型宣言。
③stock01.cppを変更する。
 ヘッダの宣言。
 変数の処理の中身をそれぞれ記述。
 
---V--(stock00.def)----------------------------------------------------------------------------
EXPORTS
  int_style
  str_style @2
---A--(stock00.def)----------------------------------------------------------------------------
 
---V--(Hellodll.h)----------------------------------------------------------------------------
#ifdef __Hellodll_H
#define __Hellodll_H
 
#include <windows.h>
const int int_style(void);
LPSTR WINAPI str_style(LPCSTR,LPCSTR);
#endif
---A--(Hellodll.h)----------------------------------------------------------------------------
 
 
---V--(stock01.cpp)-----------------------------------------------------------------
// stock01.cpp : DLL アプリケーション用のエントリ ポイントを定義します。
//
 
#include "stdafx.h"
#include "stock01.h"
 
//変更1
#include "Hellodll.h"
#include <stdio.h>
#include <string.h>
#include <windows.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;
}
*/
//
//変更2
extern "C" APIENTRY DllMain(HINSTANCE hInst, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved)
  {
    return TRUE;
}
 
 
// これはエクスポートされた変数の例です。
STOCK01_API int nStock01=0;
 
// これはエクスポートされた関数の例です。
STOCK01_API int fnStock01(void)
{
return 42;
}
 
// これはエクスポートされたクラスのコンストラクタです。
// クラスの定義については stock01.h を参照してください。
CStock01::CStock01()
return ; 
}
 
//変更3
const int int_style(){
return 99;//SysAllocStringByteLen("Hello DLL ");
}
 
//変更4
//extern "C" __declspec(dllexport)
LPSTR WINAPI str_style(LPCSTR a,LPCSTR b){
     FILE *fout=fopen("Shellex.txt","w");
 
     fprintf(fout,">%s,%s\n",a,b);
     fprintf(fout,">%s",b);
     fclose(fout);
     
return (char*)b;
     
}
 
 
---A--(stock01.cpp)-----------------------------------------------------------------
 
<<VB>>
---V----(標準モジュール)-------------------------------------------------------------
 Declare Function int_style Lib "stock01.dll" () As Integer
  
Declare Function str_style Lib "stock01.dll" (ByVal a As String, ByVal b As String) As String
---A----(標準モジュール)-------------------------------------------------------------
 
---A----(Form1)-------------------------------------------------------------
Private Sub Command1_Click()
 On Error GoTo trap
   Text3.Text = int_style 
   
 Exit Sub
trap:
 MsgBox Err.Description & vbLf & Err.Number
 Err.Clear
 
End Sub
 
Private Sub Command2_Click()
 On Error GoTo trap
   Text4.Text = str_style(Text2.Text, Text1.Text)
   
 Exit Sub
trap:
 MsgBox Err.Description & vbLf & Err.Number
 Err.Clear
 
End Sub
---A----(Form1)-------------------------------------------------------------
 
<<参考1>>
 
C 言語の宣言の Visual Basic への変換
 
 
多くの DLL プロシージャのドキュメントでは、C 言語の構文が使われています。Visual Basic から DLL プロシージャを呼び出す場合は、有効な Declare ステートメントに変換し、正しい引数で呼び出す必要があります。
 
この翻訳作業では、C 言語のデータ型を Visual Basic のデータ型に変換し、各引数が値 (ByVal) で呼び出されるか、または暗黙の参照 (ByRef) で呼び出されるかを指定する必要があります。次のテーブルは、C 言語の一般的なデータ型とそれに対応する  Visual Basic のデータ型の一覧です。
 
C 言語の宣言 Visual Basic の宣言 Visual Basic の呼び出し時の引数 
ATOM ByVal variable As Integer 整数型として評価される式。 
BOOL ByVal variable As Long 長整数型として評価される式。 
BYTE ByVal variable As Byte バイト型として評価される式。 
CHAR ByVal variable As Byte バイト型として評価される式。 
COLORREF ByVal variable As Long 長整数型として評価される式。 
DWORD ByVal variable As Long 長整数型として評価される式。 
HWND, HDC, HMENU, etc. (Windows のハンドル) ByVal variable As Long 長整数型として評価される式。 
INT, UINT ByVal variable As Long 長整数型として評価される式。 
LONG ByVal variable As Long 長整数型として評価される式。 
LPARAM ByVal variable As Long 長整数型として評価される式。 
LPDWORD variable As Long 長整数型として評価される式。 
LPINT, LPUINT variable As Long 長整数型として評価される式。 
LPRECT variable As type そのユーザー定義型の任意の変数。 
LPSTR, LPCSTR ByVal variable As String 文字列型として評価される式。 
LPVOID variable As Any 任意の変数。文字列を渡すときは ByVal を使用。 
LPWORD variable As Integer 整数型として評価される式。 
LRESULT ByVal variable As Long 長整数型として評価される式。 
NULL As Any or
ByVal variable As Long ByVal Nothing、ByVal 0&、または vbNullString。 
SHORT ByVal variable As Integer 整数型として評価される式。 
VOID Sub procedure 適用不可。 
WORD ByVal variable As Integer 整数型として評価される式。 
WPARAM ByVal variabl As Long 長整数型として評価される式。 
 
<<参考2>>
 
PR
【2012年04月30日08:08 】 | 未選択 | コメント(0)
コメントの投稿













前ページ | ホーム | 次ページ

忍者ブログ [PR]