• 締切済み

VS2010環境で2点ほど質問

質問 1. コンパイル時 warning C4793: *******ネイティブ関数としてコンパイルされました: 非 clrcall 仮想呼び出しサンクは、ネイティブとしてコンパイルする必要があります といった警告が数行にわたって出力されます デバッグして動作に問題ないことはわかっているのでコンパイル時に 煩わしいこのメッセージ出力をさせなくしたいと思い該当コードの前に #pragma warning(disable: 4793) を追記したのですが出力が消えません(ソースコード先頭に記載しても変わらず) どうすれば消せるでしょうか 質問2. ファイル編集時 関数名などの補完機能(正確な機能の名称がわかりません) が使えなくなってしまい(ポップアップで候補が表示される機能のことです) 非常に使いにくいのですが再び動作するように直すことはできないでしょうか? 新規でプログラム作るときちんと機能しています (もともとは機能していましたがいつのまにか動かなくなりました)

みんなの回答

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.2

>否定されるだけでは解決になりません #1の方は否定してるわけではないと思いますが。 http://okwave.jp/qa/q8238837.html で私が注意したように「警告をその場しのぎで安易な対処しないように」と注意されてるだけで。 質問文読んだ感じでも #pragma warning(disable: 4793) でしのげてたら、それで済ませてしまいそうですし。 ちなみに私は具体的な対処方法は存じません。 ネイティブコードとマネージドコードの混在はできれば避けたいですし。 なんとなくなら、ネイティブコードでラップ関数作ってPInvoke使うのかなぁと思ってますが。

  • hitomura
  • ベストアンサー率48% (325/664)
回答No.1

> コンパイル時 > (中略) > といった警告が数行にわたって出力されます > (中略) > どうすれば消せるでしょうか おいおい警告を無視するなよ(^_^; http://msdn.microsoft.com/ja-jp/library/vstudio/dby9t00y.aspx を見れば解るのですが、この警告はマネージドコードの中でネイティブコードとしか解釈できないコードが混在していると発生します。 対策としては、 (1)問題の関数をマネージドとしてコンパイルできるように書き換える (2)プログラム全体をネイティブに書き換え、コンパイル設定をネイティブプログラムを生成するように変更する のいずれかでしょう(P/Invoke……うっ、頭が……)。

koi1234
質問者

お礼

>おいおい警告を無視するなよ(^_^; 回避できる具体的なコードがわかればそうしたいところなんですけどね 今までVC6使ってたのが今回VS2010にいきなり変化したのと サンプルが コマンドプロンプトでのプログラム 実際はMFC使って.Netの使ってるということで 具体的なコードサンプルが見つからないんですよ おまけに今回警告が出たCOM使うのも初めて 警告が出ていても動作上の問題がないことは確認ができています 実際にエラーとなるコードは CComObject<CTestDataWriter2Event>::CreateInstance(&eventSink); というものなのですが この部分の問題だけなのですが対処を考えると(1)が望ましいと思って いろいろ試行錯誤したのですが情報も得られず左折したというところです どういった変更すればいいかわかりますか? 否定されるだけでは解決になりません

関連するQ&A