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")
と書いています。
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.4
- 回答日時:
そのまえに、C++プロジェクトで、Win32 Dynamic Link Libraryを選んでいますか?
普通DLLではstdlibなんてincludeしません。
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.7
- 回答日時:
C++のプロジェクトに先ほど言ったように、拡張子を.defにしたテキストファイルを加えます。
または、a-kumaさまの言うとおり、__declspecを使っても構いません。
好きな方をお勧めします。
>>あと、今回はいいですが、関数名の大文字小文字の区別にも気を付けてください。
>どういうふうにするのが普通なんですか?
VBでは大文字と小文字の区別はありませんが、Declare Functionに指定する関数名だけは、大文字と区別を厳密に区別するので、C側で作った関数と大文字/小文字を統一しろと言うことです。
お探しの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も見ています
-
外出時に「待たせる妻」vs イライラする「待つ夫」は日本だけ?見習いたい海外事情
夫の家事参加に積極的なイメージのある海外でも、同様の事例はあるのか。結婚カウンセラーの佐竹悦子さんに伺ってみた。
-
GetNextWindowがDLLファイルUser32.dll内に見つかりません。
Visual Basic(VBA)
-
VBから参照できないCのDLLを使用する方法
Visual Basic(VBA)
-
VB6.0で、DLLを動的に参照したい
Visual Basic(VBA)
-
-
4
IT初心者です 仕事で、vb.netで作成されたdllをvbaで呼び出すプログラムを作成しろと言われ
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB.NETで他のプロジェクトで作...
-
ACCESSのEXEを作るのは可能...
-
エラーの原因は?「この関数の...
-
ソースから参照しているOCXの一...
-
他の.CPPファイルに定義した関...
-
VisualBasicを保存するときにで...
-
Microsoft C Ver5/6の入手方法
-
VC++でexeファイルが作成できま...
-
VC++で.csprojが開けません。
-
srand48? drand48?
-
ディストリビューションウィザ...
-
コンパイルするときに、ファイ...
-
VB6.0の別名保存について
-
GrWinの使用方法について
-
「マージする」とは?
-
同じソースコードなのにバイナ...
-
Wingdi.h Windows.h を開くには?
-
VB.NETでActiveX(OCXファイル)作成
-
bcrypt.h コンパイルエラー
-
darwinのダウンロード場所
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.NETで他のプロジェクトで作...
-
ACCESSのEXEを作るのは可能...
-
VC++でexeファイルが作成できま...
-
他の.CPPファイルに定義した関...
-
ソースから参照しているOCXの一...
-
エラーの原因は?「この関数の...
-
VB6で、非表示モジュール(?)の...
-
VB.NETでActiveX(OCXファイル)作成
-
コンパイルするときに、ファイ...
-
C#のクラスをVB.netで使用したい!
-
プリコンパイル?
-
VS2010 ProductVersion 変更
-
「マージする」とは?
-
VCでストップウォッチを作りた...
-
VisualBasicを保存するときにで...
-
Visual Studioでプロジェクトが...
-
VB6.0 オブジェクトを一覧で表示
-
VC++ 2005 Intellisenseを更新....
-
VB6 exeファイルのプロパティの...
-
sys/ipc.h や sys/shm.h
おすすめ情報