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

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

新規登録して質問してみよう
ただいま回答率
85.48%
DLL

DLL(Dynamic Link Library)とは、他のモジュールからも使用する事が出来る、関数とデータが格納されているモジュールのことです。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

Q&A

1回答

7769閲覧

xamarinでC++のdllを呼びたい

kamingout

総合スコア44

DLL

DLL(Dynamic Link Library)とは、他のモジュールからも使用する事が出来る、関数とデータが格納されているモジュールのことです。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

0グッド

0クリップ

投稿2016/08/07 06:50

Xamarinでアンドロイドアプリを開発しています。
XamarinのAndroidプロジェクトとは別のC++プロジェクトをソリューション内に作成し、別プロジェクトをdll化して呼び出すようにしています。

ただし、C#側のプログラムでdll内の関数を呼び出そうとしたときにSystem.DllNotFoundExceptionというエラーが表示されてしまいました。
何が原因と考えられるでしょうか?

ちなみにC#側では下記のように宣言しています。

[DllImport("dll.dll", CallingConvention = CallingConvention.Cdecl)]
private extern static int sample(int input);

C++のプロジェクトでは下記のように宣言しています。

__declspec(dllexport) int sample(int input);

お手数ですが、どなたかわかるかたがいらっしゃいましたらよろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

単にDLL(libdll.so)が参照できてないのではないでしょうか。

[DllImport("dll", CallingConvention = CallingConvention.Cdecl)]

で行けそうな気がします。
参照ブログ

どうしてもdll.dllにしたいのなら、
dllmapを使えばいけると思います。当方Xamarin.Studioでは確認していますが、VSでは未確認です。


追記
上記は回答として正しくありません。不適切な回答をしてすみませんでした。
当方が質問を質問者がこのサンプルなどのVisual Studio2015 でC++ による Android NDKを使ったDynamic Shared LibraryをXamarin.Androidのプロジェクトから参照する方法を確かめた上での質問と勝手に思い込んで回答してしまいました。

このサンプルを確認すれば、問題点は理解できると思いますので、まずサンプルを確認してください。

Xamarin.AndroidでC++なものを利用する場合、
歴史的、基本的(サンプルの2) Pre-compiled (SanAngeles_NDK))には、

  • AndroidにおいてC++のコードをライブラリとして使用するにはNDKを使う。
  • ビルドしてできたlibsフォルダ以下を、プロジェクトに追加する
  • C#コードからDllImport属性を使ってコールする。

ですが、

Visual Studioにおいて(サンプルの1) C++ for Visual Studio 2015 (SanAngeles_NativeDebug))は、
0. Visual Studio2015 で C++ による Android NDK 開発ができる

  1. 1.のDynamic Shared LibraryをXamarin.Androidのプロジェクトから参照する
  2. C#コードからDllImport属性を使ってコールする。

こともできるようです(当方Xamarin.Studioなので未確認)。

投稿2016/08/07 08:07

編集2016/08/14 06:26
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

kamingout

2016/08/07 09:01

ご回答ありがとうございます。 ただ、上記の内容に書き換えましたが同じエラーが発生してしまいました。。。。 試しにdll化したものが正しく読み込めるかを調べているので下記のようなC++のプログラムを作成しています。 #include "Header.h" int sample(int input) { return 5 + input; } 何が原因なのでしょうか...
退会済みユーザー

退会済みユーザー

2016/08/07 15:05

そもそも実現できるsampleを実行した後、それをまねて、手を動かしてみたけどエラーが出るということの質問かと思いましたが、dll化したものが正しく読み込めるかを調べているということでしたら、sampleがありますからそれをビルドして確かめてはいかがでしょうか? https://developer.xamarin.com/samples/monodroid/SanAngeles_NDK/
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問