Имена функций в создаваемой dll, изменение типа пер. для COM
Добавлено: 25 окт 2004, 02:28
Привет All,
Вот написал я свою dll для ипользования ее в xBase++ (Alaska Software). Просто xBase++ не поддерживает в лоб COM/ActiveX и мне нужно было ActiveX интерфейсные методы зваернуть в DLL функии и вызывать из из xBase по средством DllCall().
Вопрос №1
Я определял как EXPORT WORD MyFunc() а получил в dll _MyFunc@0. Если я вдруг поменяю параметр функция получает новое имя и мне приходиться еще и это отслеживать.
Как можно с этим бороться.
Вопрос №2
Мои COM интерфесные принимают [IN] BSTR и [OUT] BSTR* параметры, т.е. к примеру имя параметра и пустой буфер для возврата результата.
Из xBase++ я могу только дать CHAR*
т.е.
EXPORT WORD CALLBACK SetConfig( CHAR * strKey, CHAR * pstrValue)
....
HRESULT hr = pLink->SetConfig(BSTR strKey, BSTR* pstrValue);
....
Как правильно завернуть CHAR* в BSTRы для входного и выходного параметров.
Часть методов принимают _bstr_t параметры, но я понял что _bstr_t можно приравнивать к CHAR* т.е.
_bstr_t myvar = cChar
Нужно ли очищать созданные в с++ фукции BSTRы и нужно ли очищать созданные _bstr_t - как ?
Спасибо
Владимир
Вот написал я свою dll для ипользования ее в xBase++ (Alaska Software). Просто xBase++ не поддерживает в лоб COM/ActiveX и мне нужно было ActiveX интерфейсные методы зваернуть в DLL функии и вызывать из из xBase по средством DllCall().
Вопрос №1
Я определял как EXPORT WORD MyFunc() а получил в dll _MyFunc@0. Если я вдруг поменяю параметр функция получает новое имя и мне приходиться еще и это отслеживать.
Как можно с этим бороться.
Вопрос №2
Мои COM интерфесные принимают [IN] BSTR и [OUT] BSTR* параметры, т.е. к примеру имя параметра и пустой буфер для возврата результата.
Из xBase++ я могу только дать CHAR*
т.е.
EXPORT WORD CALLBACK SetConfig( CHAR * strKey, CHAR * pstrValue)
....
HRESULT hr = pLink->SetConfig(BSTR strKey, BSTR* pstrValue);
....
Как правильно завернуть CHAR* в BSTRы для входного и выходного параметров.
Часть методов принимают _bstr_t параметры, но я понял что _bstr_t можно приравнивать к CHAR* т.е.
_bstr_t myvar = cChar
Нужно ли очищать созданные в с++ фукции BSTRы и нужно ли очищать созданные _bstr_t - как ?
Спасибо
Владимир