TaSwavoDB Ответов: 1

Как избежать математической ошибки при использовании STD


Я отчаянно пытался получить доступ к DLL C++ из программы C# WinForms.
Проблема в том, что метод принимает char*, А C# не любит указатели.

Поэтому мне пришла в голову идея добавить обертку в мой C++, которая принимает строку.
Но как только я добавляю пространство имен std (непосредственно или с помощью) Я получаю ошибку, которая является проблемой

ошибка C2061: синтаксическая ошибка: идентификатор 'acosf'

Я не использую математический код в своей программе. Так что, похоже, я привожу математический код, даже если я не использую пространство имен в целом.
Что я могу сделать?

Что я уже пробовал:

#include <string>
using namespace std;
int keycompy(string s1, string s2)
{
//stuff
}

также пробовать
#include <string>
int keycompy(std::string s1, std::string s2)
{
//stuff
}

Richard MacCutchan

Где происходит ошибка?

TaSwavoDB

Когда я компилирую (или раньше), это происходит в CMATH на линии
использование _CSTD acosf; использование _CSTD asinf;

это начало 102 ошибок - все в CMATH и все аналогичного характера

*edit* должен ли я рассматривать строку раньше (в CMATH)
#if _GLOBAL_USING && !defined(RC_INVOKED)
а может быть, не определить _GLOBAL_USING в моем коде? Или это повлияет на то, что я хочу?



***изменил имя на TaSwavoDB, поскольку член 12032062 казался безличным и предоставлялся системой... имя Дейв

Richard MacCutchan

Я только что скомпилировал этот код и не получаю ошибки. Должно быть, что-то другое вызывает его, что вы не показываете.

TaSwavoDB

Вау - это отличная (но разочаровывающая по-другому) новость.
Спасибо, Ричард.
Поскольку я нахожусь в крайнем сроке, на самом деле быстрее преобразовать ту часть библиотеки DLL C++, которая мне нужна, в C#, а не прокладывать маршрут через все это (это большая библиотека, и мне нужны только две ее части).
Большое спасибо за вашу помощь.
Я напишу здесь, если узнаю причину позже - вы спасли меня, по крайней мере, на неделю или две.

1 Ответов

Рейтинг:
2

KarstenK

Макрос _CSTD не разрешен, и поэтому возникает ошибка.

Для работы со строкой лучше всего использовать класс ByteBuffer. Этот статья объясняет этот метод.