OpenCVを使用したC++/CLIプロジェクトがあります。このバージョンのOpenCVをVS2010で自分でコンパイルしたところ、管理されていないプロジェクトで問題なく使用できました。管理されたプロジェクトで使用しようとすると問題が発生しました。
対象となる関数はですcv::imread(std::string&, int)
。管理対象モジュールから呼び出すだけではまったく機能せず、受信側で<無効なポインタ>が生成されました。私はそれを期待していた。結局のところ、マネージコードには独自のstd::string
実装があります。
別のC++ファイルを作成し、そのモジュールからCLIサポートを削除して、コードをその中に配置すると、状況はもう少し興味深いものになりました。今、imread
有効なポインタを取得していましたが、その内容はスクランブルされていました。どうやら、string
私はそれを4バイトオフセットした文字列ポインタを含んでいたのですが、それは0オフセットであると予想していました。
アンマネージモジュールはOpenCVと同じCRTDLLを使用しており、すべてのオプションが通常のOpenCVの使用に適した値に設定されています。なぜ異なるstring
レイアウトになるのでしょうか?迷っています。
サンプルコード:
#include <opencv/cv.h>
#include <opencv/highgui.h>
#include <string>
using namespace cv;
using namespace std;
void Run()
{
string path("C:\\Users\\Don Reba\\Pictures\\Merlin 1D.jpg");
Mat image(imread(path, CV_LOAD_IMAGE_GRAYSCALE));
imwrite("image.jpg", image);
}