掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
Borland C++でつくったDLLを使うには? (ID:103628)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
試しに自分の環境で VC++6.0、BC++5.5でそれぞれDLLを作成し、 VBから呼び出してみました。参考にしてください。 ちなみにCはオマケで知ってる程度なので、コーディングの仕方とか 「こんなコーディングしないよ!」とかいわれるかも知れませんが 参考までに... DLLはVC,BC共に同じコーディングで問題ありませんでした。 #include <windows.h> extern "C" _declspec( dllexport )int _stdcall tasu( int data1, int data2 ); extern "C" _declspec( dllexport )int _stdcall hiku( int data1, int data2 ); _declspec(dllexport)int _stdcall tasu( int data1, int data2 ) { return( data1 + data2 ); } _declspec(dllexport)int _stdcall hiku( int data1, int data2 ) { return( data1 - data2 ); } しかし、VBで呼ぶ場合の関数名に違いがありました。 クイックビューアと言うWindowsに標準添付されているアプリで エクスポート関数名を確認したら、VCで作成したDLLには _tasu@8 _hiku@8 と登録されていたのに、BCで作成したDLLには tasu hiku と登録されていました。この点から、VBで読込むDeclare以降の 関数名をそれぞれ違ったものにしなければ関数が実行できない (ちょっとエラーは違うが 「エントリ _tasu@8がDLLファイル dlltest.dll内に見つかりません。」というエラーがでる) テストしたVBのソースコードは次のとおりでした。 [コントロールの説明] Text1 … 数値データ1 Text2 … 数値データ2 Text3 … 足し算の結果 Text4 … 引き算の結果 Command1 … 足し算の起動 Command2 … 引き算の起動 [ソースコード] Option Explicit ' VC++でDLLを作成した場合 'Private Declare Function tasu Lib "dlltest.dll" Alias "_tasu@8" (ByVal data1 As Integer, ByVal data2 As Integer) As Long 'Private Declare Function hiku Lib "dlltest.dll" Alias "_hiku@8" (ByVal data1 As Integer, ByVal data2 As Integer) As Integer ' Boland C++ でDLLを作成した場合 Private Declare Function tasu Lib "dlltest.dll" (ByVal data1 As Integer, ByVal data2 As Integer) As Long Private Declare Function hiku Lib "dlltest.dll" (ByVal data1 As Integer, ByVal data2 As Integer) As Integer Private Sub Command1_Click() Dim iData1 As Integer Dim iData2 As Integer Text3.Text = CStr(tasu(CInt(Text1.Text), CInt(Text2.Text))) End Sub Private Sub Command2_Click() Dim iData1 As Integer Dim iData2 As Integer Text4.Text = CStr(hiku(CInt(Text1.Text), CInt(Text2.Text))) End Sub と、こんな感じでやればまとも?に動きました。 あと、DLLのパスは描いた方がいいかも。もしかして、同名のDLLが System(System32)フォルダにあったら、嫌ですよね。 参考にしてみてください。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.