質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

3571閲覧

C#のDLLをC++から呼び出すプロジェクトのデバッグ設定について

GuielNo4

総合スコア88

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2018/11/13 08:18

経緯

visualstudio にて
C# プロジェクト「CsharpPart」
C++ プロジェクト「MainCaller」
という構成でデバッグを行っています。

デバッグ実行時、CsharpPart.dll CsharpPart.pdb が見つからないので、
(System.IO.FileNotFoundException エラーとなります…)
リンカの「追加ライブラリディレクトリ」や
コンパイラの「追加の#usingディレクトリ」に
CsharpPart.dll .pdb のあるディレクトリを指定しているのですが、
解決できませんでした。

CsharpPart.dll CsharpPart.pdb を MainCaller.exe にコピーすれば、
この問題は発生しないことから、
ビルド時の設定で解決する話ではなくて、
コードが間違えている可能性もあるかと思い、質問させて頂きました。

質問内容

(1) 下記のソースコードやプロジェクト構成を変更しない場合、
プロジェクトプロパティの設定を変更したとしても、
そもそも仕様として DLL は exe のフォルダにないとデバッグできないと考えた方がよいでしょうか?

(2) プロジェクトプロパティの設定を変更すれば、必ずデバッグできるハズでしょうか?

(3) 今回の件はビルド設定ではなく、コード自体で解決する方向で進めるべきでしょうか?

アドバイス頂けると助かります。宜しくお願い申し上げます。

該当のソースコード

C#

1using System; 2using System.Collections.Generic; 3using System.Linq; 4using System.Text; 5using System.Threading.Tasks; 6 7namespace CsharpPart 8{ 9 public class CsharpParts 10 { 11 public static int counter { get; private set; } 12 13 public CsharpParts() 14 { 15 counter = 0; 16 } 17 18 public static void Update() 19 { 20 counter += 1; 21 } 22 } 23}

C++

1#include <iostream> 2#using "CsharpPart.dll" 3using namespace CsharpPart; 4 5int main( void ) 6{ 7 CsharpParts::Update(); 8 printf("%d\n", CsharpParts::counter); 9 return 0; 10}

補足情報(FW/ツールのバージョンなど)

.NET Framwork 4.5
Visualstudio 2013 (v120)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

DLL は exe のフォルダにないとデバッグできないと考えた方がよいでしょうか?

そんなことはありません。別ディレクトリのdllをロードする手段はあります。

プロジェクトプロパティの設定を変更すれば、必ずデバッグできるハズでしょうか?

各プロジェクトの出力先ディレクトリを同一にしてしまうのが手っ取り早いと思います。

コード自体で解決する方向で進めるべきでしょうか?

私としては上で挙げた設定にしたほうがいいと思います。
パスを指定して dll をロードする方法だと、リリース時にそのフォルダ構成が強制されますし、プロジェクト階層を遡って隣のフォルダの dll を参照する処理が美しいとは思えないので。

参考までに x86/x64 で dll を切りかえる方法です。
C#からネイティブDLLを呼び出す場合のVSからのデバッグのジレンマを解決する

投稿2018/11/20 10:22

gaya-K

総合スコア449

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

GuielNo4

2018/12/10 04:52

1) 2) とても助かりました。これをとっかかりにして同一/別ディレクトリどちらで行くか3)の検討を進めたいと思います。 回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問