いつもお世話になっています。
現在、それぞれCのみで作成したファイルをリンクし、ひとつのDLLファイルまたはEXEファイルを作成したいのです。

作成方法はWin98,MS-VisualStudio6.0です。

今まで調べたやりかたでWin32Dynamic・・・
で「シンボルをエクスポートする」で行った場合、
DLLmainが「CPP」になってしまいました。

DLLmainをCで作成したい場合は、やはり空の「シンボルを作成する」にしなければいけないのでしょうか?
網羅する場合はプロトタイプ宣言を外部ヘッダファイルに記述するのでしょうか?

そのサンプルと言うか、詳しく掲載しているサイトがあったら教えてください。
初心者なので、MSDNの説明だと理解に苦しみます。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

>初心者


とは、WindowsのMS-VisualStudio6.0が初めてであって、ほかのOSやC言語の開発環境は、「知っている」という感じですね。

で、すでにあるCソース(複数ファイル)をリンクして、Winで動作させたい。
と見ました。
(違ったらゴメン)

DOSやUNIXのような、CUIの開発環境でmakefileを使っていた人には、あのような統合環境は「いったい何を勝手にやってくれているのか?」がわからなくて、「ちゃんとした説明があれば、自分でできるのに」と、とっつきにくいです。
私は、以前上記のようなことをやりましたので、その方法を・・・

まず、拡張子CPPのファイルの中にC言語ソースプログラムを書いても何ら問題ありませんので、認識してください。

>空の「シンボルを作成する」にしなければいけないのでしょうか?
 しなくてもいいですが、サンプルコードが作成されますので、参考にしやすいです。

「シンボルをエクスポートする」で、プロジェクトを作成、既存のCファイルを拡張子Cppにして、ワークスペースのファイルビュー(ファイルがツリー状態で表示されている)のソースファイルのところで右クリック、cppファイルを追加してゆきます。
エクスポートするための定義が(xxx.h)の中に(XXX_APIのような形で)defineされてありますので、外部から利用したいシンボルの前につけます。
xxx.cpp のサンプルどおりにすればよい。
特にDLLの初期化や終了時のコードがなければ、xxx.cppは、ほうっておく。
このファイルにプログラムを書いてもいいが、既存のファイルであれば、その必要はないですね。

>網羅する場合はプロトタイプ宣言を外部ヘッダファイルに記述するのでしょうか?
 全部のシンボルを外部利用可能にするなら、全部につけます。プロトタイプ宣言は、その関数が使われる前であれば、外部ヘッダファイルでなくてもよい。(MSCと同じです)。まぁ、外部ヘッダファイルのほうが、管理しやすいと思いますが・・・

>そのサンプルと言うか、詳しく掲載しているサイトがあったら教えてください。

 これは、ANo.#1のitohh さんの回答がいいと思います。

あとは、プロジェクトをビルドすると、コンパイル&リンクされ、プロジェクトの設定で指定した場所にDLLファイルが作成されますので、外部プログラムから、変数や関数を利用できます。

#ちなみにVC6.0 は、MSCバージョン12です。統合環境でなくても、Winアプリを作成できます。
#あの統合環境が嫌いで、エディタでソースを書いて、DOS窓でmake(nmake)している人や、
#自分流で使いやすいGUIのツールを作ってしまった人(↓)もいます。

参考URL:http://www.arcpit.co.jp/apmake_0.htm
    • good
    • 0

こんにちは。

itohhといいます。

Googleなどで検索すると結構な数がヒットしますよ。
「DLL 作成 VC」で検索した結果をいくつか載せておきますね。

・DLL作成
http://www2s.biglobe.ne.jp/~maekawa/dev/vc/dll/m …

http://hp.vector.co.jp/authors/VA019517/howtodll …
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q「恵比寿」と「戎」、どっちが正しいの?

「十日えびす」の「えびす」は漢字で
「戎」が正しいのですか?
それとも「恵比寿」でしょうか?

七福神の恵比寿さんなので「十日恵比寿」だと思ってきたのですが
違うと言われました。

どちらが正しいのでしょうか?

Aベストアンサー

九州では十日恵比寿、関西は十日戎みたいです。

博多:十日恵比寿:十日恵比寿神社

西宮:十日戎:西宮神社(蛭子神系の戎神社の総本社)

大阪:十日戎:今宮戎神社

QVisualStudio2013MSDNの買い方

こんにちは。
VisualStudio2013のMSDN付きを買いたいのですが、普通にAmazonで売っていますがそれを買ってくればよろしいのでしょうか?
http://www.amazon.co.jp/dp/B00GBK7R3G/
MSDNを利用したい場合は何か必要な手続きはあるのでしょうか?

Aベストアンサー

ん~と、少なくとも 2 年使う場合はその値段だったらあと 3 万円足してオープンライセンスを買った方がトータルで得だと思いますよ。
http://licenseonline.bbss.co.jp/valumore/?lolcid=msdnBizStore

Q恵比寿のガーデンプレイスは何時まで夜景が見られますか。

外国人ですが今回東京の恵比寿にあるガーデンプレイスの夜の風景が奇麗だと聞きました。恵比寿のガーデンプレイスは何時まで夜景が見られますか。(電球が光ってるのなんじまでですか)そして恵比寿タワーの展望台は何時まで入場できますか。

Aベストアンサー

下記サイトを参考に。

展望スペース
http://machi.goo.ne.jp/snd/spotID_TO13011208/leisure/details.asp
東京都渋谷区恵比寿4-20 恵比寿ガーデンプレイスタワー38・39F

恵比寿ガーデンプレイス展望スペース恵比寿を代表する大型複合都市としておなじみの恵比寿ガーデンプレイス。高さ約160mのエレベータースペース
期間 通年
営業時間 11:30~23:00
休業日 2月第3日曜
入場料 無料




http://gardenplace.jp/restaurantcafe/compassrose.html?mv=cn&id=leadDetail
コンパスローズ(スカイラウンジ)
場所:ウェスティンホテル東京22F
営業時間:14:00~25:00
定休日:無休
座席数:60席

QシンボルをエクスポートするDLLの初歩的トラブル

VC++6.0で簡単なDLL作成にチャレンジしたところ、ソースファイルの最後のところで、エンドオブファイルのエラーが出ます。教本と同じように書いたつもりですが、何処が異なっているのか分かりません。エラーを出す原因となっている箇所を御指摘下さい。

↓ソースファイル
#include "stdafx.h"
#include "SUB.h"

BOOL APIENTRY DllMain( HANDLE 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;
}

SUB_API LONG _stdcall subtract( LONG sub1 , LONG sub2 )
{
return( sub1 - sub2 );
}

↓ここからはヘッダーファイル
#ifdef SUB_EXPORTS
#define SUB_API __declspec(dllexport)
#else
#define SUB_API __declspec(dllimport)
#endif

#ifdef__cplusplus
extern "C" {
#endif
SUB_API LONG __stdcall subtract( LONG sub1, LONG sub2 );
#ifdef _cplusplus
}
#endif

--------------------構成: SUB - Win32 Debug--------------------
コンパイル中...
StdAfx.cpp
コンパイル中...
SUB.cpp
C:\Program Files\Microsoft Visual Studio\MyProjects\SUB\SUB.cpp(38) : error C2059: 構文エラー : 'end of file'
cl.exe の実行エラー

SUB.dll - エラー 1、警告 0

VC++6.0で簡単なDLL作成にチャレンジしたところ、ソースファイルの最後のところで、エンドオブファイルのエラーが出ます。教本と同じように書いたつもりですが、何処が異なっているのか分かりません。エラーを出す原因となっている箇所を御指摘下さい。

↓ソースファイル
#include "stdafx.h"
#include "SUB.h"

BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
cas...続きを読む

Aベストアンサー

ヘッダーファイルの最後の部分
二つ目の#ifdef行にタイプミスが見られます。
#ifdef _cplusplus --> #ifdef __cplusplus

QJR恵比寿駅から東京メトロ日比谷線恵比寿駅に行くには?

東京メトロ日比谷線恵比寿駅から電車に乗るのですが、まず山手で恵比寿まで行きます。ヤフーの路線で地元から調べたところ他21分とでてきました。JR恵比寿駅から東京メトロ日比谷線恵比寿駅に行くには駅構内の移動ではないのでしょうか??たくさん歩きますか?急いでいますお願いします

Aベストアンサー

下記URLの恵比寿駅構内図参考にしてください。

参考URL:http://www.jreast.co.jp/estation/stations/index.asp

Qmain.cpp以外のcppの追加について

VisualC++を使用し、プログラムを作っています。
そこでプログラムを整理しようと思うのですが、
main.cpp以外もcppを作成し、プログラムを分割することが可能ですよね?
cppファイル自体は作ることができるのですが、
作った後どのようにしてmain文から呼び出し?をするのか具体的なことがわかりません。

どのようなワードで検索が引っ掛かるのかもわからないので
掲載しているHP、もしくはやり方を教えてください。

私自身理解が足りていないので、
説明もあやふやなものになっていますがよろしくお願いします。

Aベストアンサー

参考まで…。

http://blog.livedoor.jp/tek_koc/archives/50198846.html

Qミック・ジャガーは欧米でも日本と同じくらい有名ですか

ミック・ジャガーという歌手は、日本でたいへん有名ですが、
アメリカやヨーロッパでも日本と同じくらい有名な人なのですか。

Aベストアンサー

日本と同じくらい  と いわれましても 日本でどのくらい有名がわかりません。

それはさておき、 アメリカでは 有名です。 アメリカの VP を知らなくても ミックジャガーは知っていると思います。 知らない人を探すのが難しいと思います。

QCファイルとCPPファイルのDLL作成

CファイルとCPPファイルを同一DLLに取り込むことは可能でしょうか?もし可能であれば実現方法も教えて頂きたいのですが。
現状は別DLLを作成しているのですが、両ファイルを取り込んでビルドすると外部関数宣言をしている箇所がエラーになってしまいます。(extern "C"の箇所が・・・)

Aベストアンサー

extern "C"を使っているのはCPPファイルですか?
またextern "C"が何をするか理解されていますか?

extern "C"の意味を理解なされていないのであれば素直に諦めるか拡張子をCPPで統一してProjectに登録した方が楽でしょう。

C++では関数名に引数の種類や個数の情報を付与し、オーバーロードを実現します。
extern "C"はその後に続く定義関数のlinkage命名方法をCと同じ命名規約で名前付けします。
つまりその中にオーバーロードした関数などがあると(命名規約が変わり一意に関数が特定できないため)旨くリンクできなくなる可能性があります(実際に試した事はないんでどうなるかは不明ですが)。

なのでc拡張子のファイルをcppにするだけでも命名規約はCPPにそろうため旨く動くはずです。

どうしてもextern "C"を使うのであればMSDNの
VisualC++ドキュメント-VisualC++ユーザーズガイド-VisualC++プログラマーズガイド-プログラム機能の追加-詳細-混合言語によるプログラミング-C++を使った混合言語によるプログラミング
を読みましょう。

extern "C"を使っているのはCPPファイルですか?
またextern "C"が何をするか理解されていますか?

extern "C"の意味を理解なされていないのであれば素直に諦めるか拡張子をCPPで統一してProjectに登録した方が楽でしょう。

C++では関数名に引数の種類や個数の情報を付与し、オーバーロードを実現します。
extern "C"はその後に続く定義関数のlinkage命名方法をCと同じ命名規約で名前付けします。
つまりその中にオーバーロードした関数などがあると(命名規約が変わり一意に関数が特定できないため)旨く...続きを読む

Q神さまの「恵比寿」と地名の「恵比寿」

神さまの「恵比寿」と地名の「恵比寿」は何か関係がありますか?

Aベストアンサー

一応あるといえばある。
地名の恵比寿は昔そのあたり一帯がビールの工場であり、その工場で作っていたのが(今も売られている)エビスビールであったことに由来しています。
そしてエビスビール自体はラベルのとおり神様の恵比寿様から名前を取ってます。

つまり直接ではないが、影響を受けていることには間違いない。

QVisualStudio2005でのDLL作成

開発環境
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

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

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

Aベストアンサー

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

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

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

VC付属の MSDN(ヘルプ)で
VC++
 リファレンス
  ATL
以下を参照してみてください


人気Q&Aランキング

おすすめ情報