Я разрабатываю процесс, который работает под С++ и должен вызываться из веб-сервиса на С#.
В первой версии программы программа на c# успешно работает с dll на c++, состоящей из нескольких классов и одного класса ref со статической функцией.
После этого я создал веб-сервис WCF и перенес свой код:
Функция вызова веб-службы С#:
try
{
StringBuilder d = new StringBuilder(1000);
fixed (byte* pt = shelfImage)
{
vf.Operations.IdentifyBrands(pt, (int)shelfImage.Length, rowCount, columnCount, d);
}
Logger.log("Result is: " + d.ToString());
return d.ToString();
}
DLL-часть С++:
//Importing GMM and elm data
std::string dataDir = "C:\\VisionFetchData\\";
FeatureExtractor fx;
fx.loadGMM(dataDir+"gmmCigarette.yml");
ELMClassifier* elm = new ELMClassifier(dataDir + "elmv3.bin");
//extracting features and identifying brands
std::vector<float> shelfFeatures = fx.processShelf(mImg, detected);
std::vector<int> ids = elm->classify(shelfFeatures);
Программа успешно работает до последней строки и вылетает на функции классификации еще до входа в тело функции. Ожидается, что ShelfFeatures будет иметь размер 50K-1M. Функция классификатора использует вызов по ссылке для экономии памяти.
Я использую собственную библиотеку в классе ELMClassifier, поэтому мне приходится использовать ELMClassifier* и новое ключевое слово. Я также использовал параметр EIGEN_MAKE_ALIGNED_OPERATOR_NEW в общедоступной части определения класса.
Я пытался:
- удаление вызова по ссылке на функцию классификатора
- удаление EIGEN_MAKE_ALIGNED_OPERATOR_NEW и определение указателя класса
- вызов классификатора с вектором размера 0 (должен возвращать пустой вектор)
Что могло вызвать эту проблему и как я могу ее исправить?