プロが教える店舗&オフィスのセキュリティ対策術

開発環境
OS:WindowsXP SP2
SDK:VisualStudio2005 StandardEdition
言語:VC++
Win32コンソールアプリケーションのDLLを選択
空のプロジェクトを使用

作成したいのはVBなどから呼び出せるWin32DLLです。
他のホームページを参考にして以下のようなファイルを作成し
ビルド->コンパイルしたところdllファイルはできましたが
AccessVBAから参照設定ができませんでした。
どこを修正すればよいか教えてください。
<dlltest.cpp>
#define EX __declspec (dllexport)
#include <iostream>
#include <windows.h>
EX int fnWindowHook(void);

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;
}

EX int hundred(){
return 100;
}
<dlltest.def>
LIBRARY"dlltest1"
EXPORTS
disp @1

A 回答 (4件)

やるとすれば ATLプロジェクトでしょうね



Win32プロジェクトから作るとなると COM回りもすべて自前で実装
といった大掛かりなものになりそうです

ATLならばCOM周りをライブラリーに任せてしまって
生成するオブジェクトとUIを付け足すだけでそれなりのものが出来るでしょう

VC付属の MSDN(ヘルプ)で
VC++
 リファレンス
  ATL
以下を参照してみてください
    • good
    • 0
この回答へのお礼

度々回答ありがとうございます。
参照してみます。

お礼日時:2009/06/27 00:37

参照設定 ... 事前バインディング


CreateObject/GetObject ... 遅延バインディング
という違いです
どちらも対象はActiveX(COM)です

遅延バインディングの関数名からも分かるように何かのObjectを生成出来ないとこれらを使うことは出来ません

事前バインディングなら
dim obj as myDLLObject
Set obj = new myDLLObject

遅延バインディングなら
dim obj as Object
Set obj = CreateObject( "myDLLObject.Sample" )
といった具合の使い方になります

# CreateObjectの引数は適当です

この回答への補足

大変失礼しました。
参照設定とCreateObjectの違いではなく
参照設定とCreateObjectに対するDLLの作成のしかたの違いが知りたかったのです。
こちらの質問のしかたが悪かったのに「質問の答えにほとんどなっていない」などと言ってしまい、本当にすいません。
ご回答ありがとうございました。

補足日時:2009/06/27 00:34
    • good
    • 0
この回答へのお礼

ActiveXという名の拡張子がDLLということですか?
プロジェクトでは何になるのですか?
VisualStudioで作成可能ですか?

回答はありがたいですが、質問の答えにはほとんどなっていないです。
参照のしかたではなく参照できるものを作りたいのです。

お礼日時:2009/06/26 23:45

参照設定して使いたいなら ActiveXDLL(またはOCX)を作らないといけないでしょう



単にAccesVBAからDeclareで呼び出すのであればWin32DLLでも出来ます
この際きおつけるのは 関数の呼び出し方式が C/C++用の cdeclではなく stdcallに変更することです
外部への公開はするのは defファイルでかまいませんが
ソースを C++(cpp)で書いているのであれば
公開する関数を extern "C" { } でくくる必要も出てきそうです
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
ActiveXとDLLの違いが理解しきれていませんでした。
参照設定でもCreateObjectでも同じなんでしょうか?

extern "C"についてはどこかで見ました。
そのときはdefファイルを使うならいらないとあったので
書いていませんでした。加えてみます。

お礼日時:2009/06/26 09:11

この辺のサイトを参考にActiveX コンポーネントを作成すれば、VBAから呼び出せると思いますよ。


http://msdn.microsoft.com/en-us/library/ms221375 …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!