私は現在、ラズベリー pi (B) でモノラル ランタイムを使用しています。Windows デスクトップに Visual Studio Express 2012 を使用しています。私が基本的に達成したいのは、一連の写真をウェブカメラ (Logitech C270) から .jpg ファイルに保存することです。
私が必要としているだけのプロジェクトを見つけました: http://www.raspberry-sharp.org/romain-flechner/2012/10/projects/use-a-webcam-plugged-in-a-raspberry-pi -with-mono-in-c-using-raspberrycam/ そこで、NuGet 経由でプロジェクトにインストールし、コード サンプルをコピーしました。
Cameras cameras = Cameras.DeclareDevice()
.Named(“Camera 1″).WithDevicePath(“/dev/video0″)
.Memorize();
cameras.Get(“Camera 1″).SavePicture(new PictureSize(640, 480), “/var/www/test.jpg”, 20);
プロジェクトページの説明にあるように、RaspberryCam.so を /lib ディレクトリにコピーしました (そのために /Lib にもコピーしました)。次に、ビルドしたファイル (my.exe、RaspberryCam.dll) を Raspberry PI にダウンロードしました。
ここに私の問題があります。mono でプログラムを実行しようとすると、RaspberryCam.so の DllNotFoundException が発生します。
プロジェクト パスを /etc/ld.so.conf に追加し、ldconfig を実行しましたが、役に立ちません。
また、モノをデバッグ モードで実行してみました (MONO_LOG_LEVEL="debug" MONO_LOG_MASK="dll" mono /var/www/my.exe)。「libRaspberryCam.so」を検索しているように見えるので、/lib/RaspberryCam をコピーしました.so を /lib/libRaspberryCam.so に変更しましたが、それでも何も変わりませんでした。
ところで、私は.soファイルのアクセス権を755に変更しました(ルートの読み取り、書き込み、実行、およびワールドの読み取り、実行)。
正直なところ、私は DLL のインポートについてあまり詳しくないので、ここでばかげた間違いを犯している可能性があります。ただし、先週 raspberrycam プロジェクト ページにコメントを書きましたが、まだ回答がありません。
誰でもこの問題で私を助けることができますか?
ありがとうドミニク
編集: 実際の DLLImport のコードは、Raspberrycam プロジェクト「RaspberryCamInterop.cs」からのものです。
using System;
using System.Runtime.InteropServices;
namespace RaspberryCam.Interop
{
public class RaspberryCamInterop
{
[DllImport("RaspberryCam.so", EntryPoint = "TakePicture")]
public static extern PictureBuffer TakePicture(string device, uint width, uint height, uint jpegQuantity);
[DllImport("RaspberryCam.so", EntryPoint = "OpenCameraStream")]
public static extern IntPtr OpenCameraStream(string device, uint width, uint height, uint fps);
[DllImport("RaspberryCam.so", EntryPoint = "CloseCameraStream")]
public static extern void CloseCameraStream(IntPtr src);
[DllImport("RaspberryCam.so", EntryPoint = "ReadVideoFrame")]
public static extern PictureBuffer ReadVideoFrame(IntPtr src, uint jpegQuantity);
[DllImport("RaspberryCam.so", EntryPoint = "GrabVideoFrame")]
public static extern PictureBuffer GrabVideoFrame(IntPtr src);
}
}
編集 2: ソフト フロート ウィージーに問題があるようです。これで、標準の hard-float raspbian をインストールしました (プロジェクト ページのガイドに書かれているとおりです: http://www.raspberry-sharp.org/eric-bezine/2012/10/mono-framework/installing-mono -raspberry-pi/ ) で動作しますが、それほど高速ではありませんが、画像は保存されます。mono が ARM hard-float abi と互換性がないにもかかわらず、hard-float raspbian イメージを使用したことに少しイライラします。mono インストール ガイドでは、hard-float パッチについても言及されていません。また、RaspberryCam プロジェクトのソース コードでいくつかの回避策を見つけたので、ハード フロート abi での mono の実行に関連するバグに気付きました。
「PicturesCache.cs」のスニペット
//Timespan bug with ARM version of MONO, so we will use int in milliseconds
private readonly int duration;
ただし、ソフトフロート wheezy に固執し、いくつかのシェル スクリプトと連携して uvccapture というツールを使用して作業を行います。
それでも、あなたからのアドバイスや解決策に感謝しています。