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

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

A 回答 (4件)

extern "C"を使っているのはCPPファイルですか?


またextern "C"が何をするか理解されていますか?

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

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

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

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

コンパイラから実態が見えていないだけなのでは?



きちんと外部コール関数は定義されていますか?
⇒ヘッダーや"*.def"等のファイル。
    • good
    • 0

VC++と言う事ですが、


cファイルを既存のC++のワークスペースに取り込みたいんですよね?
⇒"c"ファイルの拡張子を"cpp"に変更して普通に組み込めませんか?
それとも逆をしようとしているのですか?

※エラー箇所がわかっているなら原因はわかると思うので、
 修正の方向ではだめなのですか?

この回答への補足

元々はCで作成したDLLとCPPで作成したDLLと別ファイルだったのですが、
呼び元の問題でDLLを1つにまとめたいとのことでチャレンジしています。
当初は安易に全ソース取り込みDLLを作成すればできると考えていた
のですが、外部宣言のextern "C"と記述するとエラーが発生してしまいます。(Cファイルがあるから?)
"C"をはずせばDLLは作成できるのですが、DLL内を見ると外部関数名に"?"がついてしまいます。
拡張子だけ変えれば済む問題なのでしょうか?

補足日時:2001/12/06 15:54
    • good
    • 0

コンパイラは何を使用しているのですか?

この回答への補足

説明不足ですみません・・VC++6.0です。

補足日時:2001/12/06 15:00
    • good
    • 0

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

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

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

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

Qエクセルで種類を数える関数が無いのは何故?

エクセルで種類を数える関数が無いのは何故なんでしょうか?

エクセルで種類を数えるには、いくつかの関数を組み合わせるのが一般的ですよね?
直接数える関数が無いのは、訳があるんでしょうか?

Aベストアンサー

>>エクセルで種類を数える関数が無いのは何故なんでしょうか?

やっぱり、そういう関数が必要な方が全体からみたら少数派だと、エクセルの開発者たちが考えているからではないかと思います。
また、既存の関数を組み合わせたら、対処可能だから、無理して新しい関数を作る必要性もない、開発の優先順位が低いって判断もあるでしょうね。

私は、エクセルの表を作ったり、エクセルVBAでプログラムを作ったりしますけど、そういう関数が必要になったことが全くありませんし。

QVisual C++でDLLを使いたいのですが、どう宣言したらよいのでしょうか?

Visual C++でDLLを使いたいのですが、どう宣言したらよいのでしょうか? またDLLは何処に入れればよいのでしょうか?
DLLはMFCで書かれています。
ご教示願います。

Aベストアンサー

libがないとリンクは出来ないでしょう
LoadLibraryとGetProcAddressを使ったサンプルです。
#include <windows.h>
#include <stdio.h>

HINSTANCE hDll;
long ( __stdcall *fft1dim)(
long,
double,
double*,
double*,
long,
long,
double,
double
);

int main(void)
{
hDll = LoadLibrary("CalFFT.dll");
if( ! hDll ){
printf("DLL load error");
return 1;
}

fft1dim = (long(__stdcall*)(
long,
double,
double*,
double*,
long,
long,
double,
double)
) GetProcAddress( hDll, "fft1dim");
if( !fft1dim ){
FreeLibrary( hDll );
printf("Get function error");
return 2;
}
printf("OK!");
FreeLibrary( hDll );
return 0;
}

libがないとリンクは出来ないでしょう
LoadLibraryとGetProcAddressを使ったサンプルです。
#include <windows.h>
#include <stdio.h>

HINSTANCE hDll;
long ( __stdcall *fft1dim)(
long,
double,
double*,
double*,
long,
long,
double,
double
);

int main(void)
{
hDll = LoadLibrary("CalFFT.dll");
if( ! hDll ){
printf("DLL load error");
return 1;
}

fft1dim = (long(__stdcall*)(
long,
double,
double*,
double*,
long,
long,
double,
double)
) GetProcAddres...続きを読む

Qエクセルの関数で

エクセルの関数辞典を見ていたら、CUMPRINC関数というのがありました。
しかし、エクセルの「挿入」→「関数」→関数の分類で「財務」というのを選択したのですが、一覧表に載っていません。
どこに載っているのでしょうか?
どうすればこの関数を使えますか?
ちなみにシートの上でやっても関数の反応をしませんでした。

Aベストアンサー

Yahooで検索してみると、参考URLが引っかかりました。

参考になりませんか?

参考URL:http://money-sense.net/doc/20041215_224257.php

Q構造体の入れ子が構造体の場合のextern宣言について

えーと、題名の通りで、単に構造体の場合はextern出来たのですが、構造体の入れ子が構造体の場合は上手くextern出来ないのです;;;

typedef struct __test001 {

int arg;

} _test001;


typedef struct _body {

_test001 test001;

} body;

body useful;

この場合、他のファイル(例えばtest.cpp)でusefulを使いたい場合、どのようにexternさせれば宜しいでしょうか?

Aベストアンサー

とりあえず、
-------------
typedef struct __test001 {

int arg;

} _test001;


typedef struct _body {

_test001 test001;

} body;

/*↓注意*/
extern body useful;
------------------

を、「何とか.h」というファイルにしておいて、
使いたいコードの最初の方で

#include "何とか.h"

とincludeさせておきます。

そして、プログラム全体で一箇所

body useful;

と宣言します。
これで何とか.hをインクルードしたソースでは
変数usefulが使えるようになっているはずです。

Qエクセルの関数 ネスト

エクセルの関数 ネスト

エクセルの関数で、ネストさせるときがあるとおもうのですが、

関数を内側に書いたらよいのか外側に書いたらよいのか分からなくなる時があります。

エクセルの関数に関してわかりやすく書いてあるページなどありますか。

Aベストアンサー

こんばんは

Excel2003までは、ネストが7まで、2007では64までが可能です。
http://www.google.co.jp/search?hl=ja&source=hp&q=excel+%E3%83%8D%E3%82%B9%E3%83%88%E3%80%802003%E3%80%802007&aq=f&aqi=&aql=&oq=&gs_rfai=

「仕様上は可能」でも、複雑なネストは間違いが生じやすいですし、変更もしにくくなります。「出来るだけネストはしない」「適宜、中間結果をセルに出力する」という方法を採った方が、間違いが少なく、柔軟性のあるシステムになると思います。

>エクセルの関数に関してわかりやすく書いてあるページなどありますか。
関数の個別の機能ならば、Webサイトも書籍も多数あるのですが、「組み合わせて使う」というのはその場その場での発想になってしまうと思います。

QDLLを直接プログラム内に取り込んでEXEファイルを作れますか

VC++.NETで開発を行う予定ですが、
そのときicmp.dllというDLLを使う予定です。
これに関する説明を読むと、将来サポートされない可能性があるとのことでした。
それで、このDLLをスタティックライブラリをリンクするように、EXE本体のなかに取り込んでおきたいのですが、そのようなことは、出来るのでしょうか。
つまり、icmp.dllのある環境で、exeファイルを作り、
icmp.dllのない環境で、そのexeファイルを実行させたいのですが、そのようなことはできるのでしょうか。

Aベストアンサー

ここで検索してみましたが
"質問:libファイル無しでかつLoadLibraryを使わずにロードする方法"
がみつかりました
>VC++.net
お使いのvisual C++は2002,2003,2005
かとおもいますが
手元のかんきょう(2003)ではコマンドは確認しました
lib
dumpbin

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=964346

Qエクセル関数の解読サイトなんてありますか?

エクセル関数の解読サイトなんてありますか?

いつもお世話になっております<(_ _)>

エクセルファイルに関数の入った数式が入力されています。
セルごとに複数の関数が入っていますが、私にはちっともわかりません。

そこで質問です。
こんなとき「エクセル関数を解読」してくれるようなサイトってありませんか?

たとえば検索窓があってそこに「=SUM(S1:S13)」わからなくて困っている関数式を入力。
すると答えの別ボックスに「S1~S13までの数値の合計」と出てくるようなサイト。

それに近いサイトでも良いので知っている方がいらっしゃればぜひ、教えてください<(_ _)>

Aベストアンサー

もし、

=IF(E14="","",IF(O14="",(IF(E14>"18:00"*1,"18:00",E14)-IF(C14<="8:00"*1,"8:00",C14))*24*1300,(IF(E14>"18:00"*1,"18:00",E14)-IF(C14<="8:00"*1,"8:00",C14))*24*1625))

だったら、どういう文章が出て欲しいのでしょうか?

もしE14が空白だったら、
 空白、
そうじゃなかったから、
 もしO14が空白だったら、
  (もしE14が18:00より大きかったら18:00、そうじゃなかったらE14)-(もしC14が8:00以下だったら8:00、そうじゃなかったらC14)×24×1300
 そうじゃなかったら、
  (もしE14が18:00より大きかったら18:00、そうじゃなかったらE14)-(もしC14が8:00以下だったら8:00、そうじゃなかったらC14)×24×1625

って感じですか?
数式をそのまま読解したほうが解りやすくないですか?

QVisual C++ Toolkitでcppをコンパイルすると・・

最近質問が多くてすみません。
一応調べてみましたが、同じような質問が既存ならば警告お願いします。

#include <iostream>
int main(){
return 0;
}

これだけのファイルを、例えばtest.cppとして保存します。そして
cl test.cpp
とすると、ぶわーっと警告(warning)がでて、しかしtest.exeができあがります。
警告内容がかなり長いので、そのうちの1つを載せます。
C:\Program Files\Microsoft Visual C++ Toolkit 2003\include\stdexcept(39) : see reference to class template instantiat
ion 'std::basic_string<_Elem,_Traits,_Ax>' being compiled
with
[
_Elem=char,
_Traits=std::char_traits<char>,
_Ax=std::allocator<char>
]

意味がわかりません!!
ちなみに、bccでは警告なしにコンパイルできます。

最近質問が多くてすみません。
一応調べてみましたが、同じような質問が既存ならば警告お願いします。

#include <iostream>
int main(){
return 0;
}

これだけのファイルを、例えばtest.cppとして保存します。そして
cl test.cpp
とすると、ぶわーっと警告(warning)がでて、しかしtest.exeができあがります。
警告内容がかなり長いので、そのうちの1つを載せます。
C:\Program Files\Microsoft Visual C++ Toolkit 2003\include\stdexcept(39) : see reference to class template instantiat
ion '...続きを読む

Aベストアンサー

-GX を指定して下さい。と書かれていませんか?

cl -GX test.cpp

Qエクセル関数を、書き写して分析できるツールはある?

タイトルの件、質問します。

エクセルの関数を分析する際に、エクセルの数式バーや、セルに入っている関数を
F2を教えて見るのでは、見にくい場合があります。

現在は、私は、メモ帳に関数をコピーして、分析したり、修正したりしています。
エクセルの機能or他ソフトで、関数を分析できるツールはあるのでしょうか??

【エクセルバージョン】
2003、2007

Aベストアンサー

難解な数式を理解したいとき,最も便利に利用できるのは,2003ではツールメニューのワークシート分析にある「数式の検証」です。
2007では数式タブにあります。

メンドクサイ数式のセルで数式の検証を使い,どの関数やどのカッコから計算が進んでいくのかを1ステップずつトレースして理解します。また意図しない結果がどの段階で発生しているのか追跡します。

このやり方は勿論間違った数式(意図しない結果が出てきた場合)を追跡するのにも使いますが,むしろ誰かに教わった「正しい数式」を理解する時に便利な方法です。
そもそも計算が通っていない(たとえばカッコの対応が間違えていて,Enterしても受け付けてくれないようなミスをしている場合)には使えません。



また,数式バーの中で数式の「中」にカーソルを入れて左右の矢印キーでカーソルを動かしていったときに,「(」や「)」をまたいだ瞬間に,対応する「閉じカッコ」「始まりのカッコ」が色つきで強調表示されるのを確認しながら,カッコの対応がまちがえてないかなどを調べるのも簡易な良い方法です。


あまり使わない方法ですが,数式の中で適宜ALT+Enterを打って「セル内改行」してしまい,数式を縦に分解して書いてみるのも整理しやすい方法のひとつです。

難解な数式を理解したいとき,最も便利に利用できるのは,2003ではツールメニューのワークシート分析にある「数式の検証」です。
2007では数式タブにあります。

メンドクサイ数式のセルで数式の検証を使い,どの関数やどのカッコから計算が進んでいくのかを1ステップずつトレースして理解します。また意図しない結果がどの段階で発生しているのか追跡します。

このやり方は勿論間違った数式(意図しない結果が出てきた場合)を追跡するのにも使いますが,むしろ誰かに教わった「正しい数式」を理解する時に便利...続きを読む

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

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

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

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

Aベストアンサー

参考まで…。

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


人気Q&Aランキング