[過去ログ] Visual Studio 2019 Part4 (1002レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
33: デフォルトの名無しさん (ワッチョイ 9733-KNAb) [sage] 2020/04/27(月) 16:50:17.31 ID:XKeOK7JX0(1/4) AAS
C++の変数がエクスポートされるシンボルについて聞きたい。
スレ違いなら誘導してください。
VCの場合、変数の型がシンボルに含まれるので、異なる型の変数を同じものとして参照させられない(リンクエラーになる)。
これをムリヤリにでも同一視させたいときはどうすれば?
○エクスポート関連をいくつか試してみたが、ダメだった。orz
○std::coutのソースを見ればわかりそうだけど、見つからんかった。orz
37: デフォルトの名無しさん (ワッチョイ 9733-KNAb) [sage] 2020/04/27(月) 18:41:33.17 ID:XKeOK7JX0(2/4) AAS
>>35
それと似てるけど、もっとあやしい話。
あるひとつの名前Lib::objが、あるソースではClassA、別のソースではClassBとして参照できるようにしたい。
# ODRから外れてるのはヨシ。
○g++だと、変数のリンク用のシンボルにはクラス情報を含めないのでふつうにセーフなんだよね。VCは含めるので別シンボルになってもうてアウト。
○extern "C"だと、名前空間が使えないし、本体オブジェクトのソースをC++で書けないのでアウト。
○VCでも、シンボルを改変する方法があるみたいなんだけど、よくわからない。。。DLL限定?
>>36
リンカレベルのunionみたいな?
ふつうのunionは、メンバ変数を書くのがイヤで。
「モジュール」で解決できる?
38: デフォルトの名無しさん (ワッチョイ 9733-KNAb) [sage] 2020/04/27(月) 19:09:10.41 ID:XKeOK7JX0(3/4) AAS
> ○extern "C"だと、名前空間が使えないし、本体オブジェクトのソースをC++で書けないのでアウト。
いや、使えるし、書けるのか。。。
ちょっと試してみると、これでなんとかなりそう。
ということで、きっと解決!
ありがとうな。
39: デフォルトの名無しさん (ワッチョイ 9733-KNAb) [sage] 2020/04/27(月) 19:50:59.03 ID:XKeOK7JX0(4/4) AAS
報告。さっきの続き。
extern "C"は、namespace{}中でも使えるし、C++的には名前空間も有効だけど、リンク用シンボルとしては、名前空間部分は外れて変数名だけになるんやな。
この結果、こっちの名前がC標準ライブラリで使われてる名前とかぶったら死亡しよる。。。
ということで、もっといい方法があったらぜひよろしく!
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 1.515s*