No.3ベストアンサー
- 回答日時:
xxxx.defというファイルがC++プロジェクト内にありますか?
このファイルでエクスポートする関数を決定します。
このファイルは次のような書式です。
-------------------------
EXPORT
HogeFunc1
HogeFunc2
HogeFunc3
-------------------------
このように先頭にEXPORTと書き、その下にエクスポーとしたい関数名を列挙したテキストファイルを、xxxx.defと名前を変えてプロジェクトに加えます。
それから、Cのint型はVBではLong型です。
-------------------------
Declare Function gGetA Lib "TEST.dll" _
(ByVal strDate As String) As Long
-------------------------
おまけにVBはCの関数のデフォルト呼び出し規則の__cdeclは使えません。
__stdcallにする必要があります。
難しいことが分からなかったら、Cのほうを次のように書き換えてください。
-------------------------
extern "C" int __stdcall gGetA(char * date)
{
}
-------------------------
あと、今回はいいですが、関数名の大文字小文字の区別にも気を付けてください。
この回答への補足
プロジェクト内にDefファイル?
ありません。
プロジェクト内には、
TESTクラス
グローバル
gGetA
しかありません。
>あと、今回はいいですが、関数名の大文字小文字の区別にも気を付けてくださ
い。
どういうふうにするのが普通なんですか?
No.7
- 回答日時:
C++のプロジェクトに先ほど言ったように、拡張子を.defにしたテキストファイルを加えます。
または、a-kumaさまの言うとおり、__declspecを使っても構いません。
好きな方をお勧めします。
>>あと、今回はいいですが、関数名の大文字小文字の区別にも気を付けてください。
>どういうふうにするのが普通なんですか?
VBでは大文字と小文字の区別はありませんが、Declare Functionに指定する関数名だけは、大文字と区別を厳密に区別するので、C側で作った関数と大文字/小文字を統一しろと言うことです。
No.6
- 回答日時:
サンプルを作ったのですが・・・
電話ラッシュで、その間にいろいろ回答が書かれてますね。。。
かぶるかもしれませんが、一応書いておきます。
それと#5a-kumaさんの発言
>今時は def ファイルはなくてもエクスポートできます。
知りませんでした。
このサンプルは思いっきりdefを使ってます。
Cの構成
Testファイル
├Source File
│├gGetA.cpp
│└gGetALib.def
│
└Header Files
└gGetA.H
// gGetA.cpp
#include <windows.h>
#include "gGetA.h"
__declspec( dllexport ) long __stdcall gGetA(char *Palam)
{
// テストのメッセージボックス
MessageBox(0,Palam,"test_VC++",0);
return 1;
}
// gGetALib.def
LIBRARY gGetALib
EXPORTS
gGetA@1
// gGetA.H
extern "C" __declspec( dllexport ) long __stdcall gGetA(char *Palam);
サンプルまで作っていただき、
本当にありがとうございます!!
プロジェクトのClassViewしか見ていませんでした。
FileViewには、いろいろなファイルがありました。
今回は、defファイルを使わない方法でやってみます。
関数をエクスポートする必要があるんですね。
ほんと、初歩的なことも知らなくてごめんなさい。
No.5
- 回答日時:
No.3 の回答にある通り、関数名(シンボル)がエクスポートされていないのが原因でしょう。
今時は def ファイルはなくてもエクスポートできます。
__declspec(dllexport) int __stdcall gGetA(char * date)
{
なんとか
}
って感じかな。
No.2
- 回答日時:
>関数がDLLファイル内に見つかりません
>VC++で作成した関数をVB6.0で使おうとしたんですが
環境の問題でなければ、単にC作成のDLLがおかしいだけでは?
今までにDLLの作成経験があるのですか?
もしそうならば、流用したらできると思いますが・・・
最低でもインターフェイス部分だけでも公開しないと、なんとも言えません。
この回答への補足
DLLの作成経験ありません。
VC++も初めてです。
C作成のDLLがおかしい可能性は十分ありますね…
#include "stdlib.h"
extern "C" int gGetA(char * date)
{
略
}
です。
VB側では、宣言部に
Declare Function gGetA Lib "TEST.dll" _
(ByVal strDate As String) As Integer
呼び出す場所では、
gGetA("20020501")
と書いています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) IT初心者です 仕事で、vb.netで作成されたdllをvbaで呼び出すプログラムを作成しろと言われ 1 2023/03/27 08:22
- その他(Microsoft Office) 【スプレドシート】IMPORTRANGE関数とSUMIFSの組み合わせ 1 2023/03/05 18:17
- Excel(エクセル) DATE関数で指定する「日」のセルが関数の場合の対処法 5 2022/09/14 15:46
- Excel(エクセル) Excelを開くとエラーが出る 2 2022/10/03 16:13
- Excel(エクセル) Excelでなぜこのような式をつかっているのでしょうか、行に1,2,3と連番を振るだけなのに 5 2023/04/08 20:00
- Excel(エクセル) エクセルでエラーを無視して一番左側のセルの値を返したい 2 2023/07/27 13:06
- Visual Basic(VBA) VBA GetAttrについて教えてください 2 2022/12/22 15:25
- Excel(エクセル) 指定した複数のグループを表示したい 3 2023/08/03 21:38
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- 数学 【数学ⅲ】三角関数と合成関数の微分について 4 2022/07/07 21:44
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
GetNextWindowがDLLファイルUser32.dll内に見つかりません。
Visual Basic(VBA)
-
VBから参照できないCのDLLを使用する方法
Visual Basic(VBA)
-
VBAからDLLをCALLしたいのですが
Visual Basic(VBA)
-
-
4
VB6.0で、DLLを動的に参照したい
Visual Basic(VBA)
-
5
IT初心者です 仕事で、vb.netで作成されたdllをvbaで呼び出すプログラムを作成しろと言われ
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB.NETで他のプロジェクトで作...
-
ACCESSのEXEを作るのは可能...
-
VC++ 他プロジェクトファイルの...
-
VB6 exeファイルのプロパティの...
-
エラーの原因は?「この関数の...
-
VS2010 ProductVersion 変更
-
ファイルがオープンできない。
-
関数がDLLファイル内に見つかり...
-
libssh2のインクルード
-
VB6.0 オブジェクトを一覧で表示
-
C言語について
-
VisualBasicを保存するときにで...
-
printfで全角カタカナが文字化け?
-
他の.CPPファイルに定義した関...
-
Visual Stadio2008 Releaseビル...
-
static宣言の共有
-
VC++でexeファイルが作成できま...
-
別ソースファイルからの呼び出し
-
ソースから参照しているOCXの一...
-
同じソースコードなのにバイナ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.NETで他のプロジェクトで作...
-
ACCESSのEXEを作るのは可能...
-
他の.CPPファイルに定義した関...
-
VB.NETでActiveX(OCXファイル)作成
-
エラーの原因は?「この関数の...
-
ソースから参照しているOCXの一...
-
コンパイルするときに、ファイ...
-
プリコンパイル?
-
VB6で、非表示モジュール(?)の...
-
Visual Studioでプロジェクトが...
-
「マージする」とは?
-
Visual Stadio2008 Releaseビル...
-
stdio.hをオープンできない…
-
コンパイルエラー「include フ...
-
C#のクラスをVB.netで使用したい!
-
VC++でexeファイルが作成できま...
-
VisualBasicを保存するときにで...
-
VS2010 ProductVersion 変更
-
VBのコンパイルしてときにbinフ...
-
関数がDLLファイル内に見つかり...
おすすめ情報