こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

AccessVBAからC言語のDLLの呼び出し方

初心者です。はじめまして
お世話になります。

概要:C言語で作成したDLLをVBAで呼び出す。

タイトルの通り、C言語で作成したDLLをVBAで呼び出したいのですが、うまく
呼び出すことができず、「エラー番号:49 DLLを正しく呼び出せません。」
というエラーが返ってきてしまいます。

DLLの作成手順もしくはDLLの呼び出し方でおかしな所があればご指摘頂けない
でしょうか?


C言語のDLL、作成手順は以下の通りです。

DLL作成環境:Visual C++ 6.0
DLL作成手順-----------------------------------------
(1)プロジェクトをDLL用に作る
 新規作成→プロジェクト→Win32 Dynamic-Link Library→空のDLLプロジェ
クト
(2)ファイル追加
 ソースファイル+すべてのヘッダファイルを追加
(3)DLLを出力対象の関数に「_declspec(dllexport)」をつける

例)-------------------------------------
_declspec(dllexport) short dlltest
(char *str1,
char *str2)
---------------------------------------
(4)char を unsigned char へ変換する(/J コンパイルオプション)
(5)プロジェクトをデバッグモードからリリースモードに切り替える
(6)ビルド実行
(7)「Release」配下に.dllとlibができる。
-作成手順完-----------------------------------------------------


実際のVBAのDLLの呼び出しは以下の通り行っています。
-AccessVBAにてDLLの宣言及び、呼び出し-------------------
'呼び出し宣言
Public Declare Function dlltest _
Lib "C:\Project\Dlltest\Release\dlltest.dll" _
(ByVal st1 As String, _
ByVal st2 As String) As Integer

'DLL呼び出し
KEKKA = dlltest(string1, string2)
-呼び出し完------------------------------------------------

これで実行するとエラーが返されていまいます。
なにぶん、初心者で今回初めてVBAでのプログラミングを行っているので観点
の抜けなどが多分にあると思われます。

どんな小さなことでもご指摘頂けないでしょうか?

宜しくお願い致します。

投稿日時 - 2007-09-28 20:59:22

QNo.3384826

すぐに回答ほしいです

質問者が選んだベストアンサー

VC側ですが 呼び出し規約を変更しないといけません
また C++(cpp)拡張子で組んであるなら extern "C"でくくるなどのひつっようがあります
外部公開用の名前が _関数名@引数のバイト数といった変換がなされるので Access側で Aliasを使って整合を取るか DEFファイルによるエクスポート名を指定しましょう

これらを踏まえて
DLL側は
short __declspec( dllexport ) __stdcall dlltest( char* str1, char * str2 )
といった具合にします

CPPファイルなら
extern "C" { // これを使って CPP命名規則を抑止します
short __declspec( dllexport ) __stdcall dlltest( char* str1, char * str2 )
  {
     // 関数本体
   }
}

DEFファイルは
LIBRARY DLLファイル名
EXPORTS
dlltest
といった具合です
# DLLファイル名は適宜修正してください

投稿日時 - 2007-09-28 21:52:46

お礼

redfox63様

動きました!!!本当にありがとうございます。

私の場合はC++ではなくCで作成したものでしたのでアドバイスの通り
short __declspec( dllexport ) __stdcall dlltest( char* str1, char * str2 )

と記述し、DEFファイルを作成しただけで動きました。

ググってもほとんど明確な答えになるものがなかったので本当に助かりました^^

投稿日時 - 2007-09-28 22:09:58

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(1)