プロが教える店舗&オフィスのセキュリティ対策術

質問 1.
コンパイル時

warning C4793: *******ネイティブ関数としてコンパイルされました:
非 clrcall 仮想呼び出しサンクは、ネイティブとしてコンパイルする必要があります

といった警告が数行にわたって出力されます
デバッグして動作に問題ないことはわかっているのでコンパイル時に
煩わしいこのメッセージ出力をさせなくしたいと思い該当コードの前に

#pragma warning(disable: 4793)

を追記したのですが出力が消えません(ソースコード先頭に記載しても変わらず)
どうすれば消せるでしょうか


質問2.
ファイル編集時 関数名などの補完機能(正確な機能の名称がわかりません)
が使えなくなってしまい(ポップアップで候補が表示される機能のことです)
非常に使いにくいのですが再び動作するように直すことはできないでしょうか?
新規でプログラム作るときちんと機能しています
(もともとは機能していましたがいつのまにか動かなくなりました)

A 回答 (2件)

>否定されるだけでは解決になりません



#1の方は否定してるわけではないと思いますが。
http://oshiete.goo.ne.jp/qa/8238837.html
で私が注意したように「警告をその場しのぎで安易な対処しないように」と注意されてるだけで。
質問文読んだ感じでも #pragma warning(disable: 4793) でしのげてたら、それで済ませてしまいそうですし。

ちなみに私は具体的な対処方法は存じません。
ネイティブコードとマネージドコードの混在はできれば避けたいですし。
なんとなくなら、ネイティブコードでラップ関数作ってPInvoke使うのかなぁと思ってますが。
    • good
    • 0

> コンパイル時


> (中略)
> といった警告が数行にわたって出力されます
> (中略)
> どうすれば消せるでしょうか
おいおい警告を無視するなよ(^_^;

http://msdn.microsoft.com/ja-jp/library/vstudio/ …
を見れば解るのですが、この警告はマネージドコードの中でネイティブコードとしか解釈できないコードが混在していると発生します。
対策としては、
(1)問題の関数をマネージドとしてコンパイルできるように書き換える
(2)プログラム全体をネイティブに書き換え、コンパイル設定をネイティブプログラムを生成するように変更する
のいずれかでしょう(P/Invoke……うっ、頭が……)。
    • good
    • 0
この回答へのお礼

>おいおい警告を無視するなよ(^_^;
回避できる具体的なコードがわかればそうしたいところなんですけどね

今までVC6使ってたのが今回VS2010にいきなり変化したのと サンプルが
コマンドプロンプトでのプログラム
実際はMFC使って.Netの使ってるということで
具体的なコードサンプルが見つからないんですよ
おまけに今回警告が出たCOM使うのも初めて
警告が出ていても動作上の問題がないことは確認ができています

実際にエラーとなるコードは
CComObject<CTestDataWriter2Event>::CreateInstance(&eventSink);
というものなのですが
この部分の問題だけなのですが対処を考えると(1)が望ましいと思って
いろいろ試行錯誤したのですが情報も得られず左折したというところです

どういった変更すればいいかわかりますか?

否定されるだけでは解決になりません

お礼日時:2013/09/05 22:37

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