как правильно вернуть из DLL строку

Это русская секция форума wxWidjets. В этой секции вы можете обсуждать любые вопросы, связанные с wxWidgets на вашем родном языке.
Post Reply
User avatar
cutecode
Filthy Rich wx Solver
Filthy Rich wx Solver
Posts: 227
Joined: Fri Dec 09, 2016 7:28 am
Contact:

как правильно вернуть из DLL строку

Post by cutecode » Wed Apr 24, 2019 6:04 pm

Имею свой exe-шник и свой DLL, который вызывается динамически
мне надо вызвать функцию из DLL

Code: Select all

LONG_PTR __cdecl KKM_open(wchar_t** err)
как правильно в переменную err "залить" строку символов?

в самой DLL я делаю примерно так

Code: Select all

LONG_PTR __cdecl KKM_open(wchar_t** err)
{
	wxString sz = getErrorDescription();
	*err = new wchar_t[sz.Length() + 1];
	lstrcpy(*err, sz);
	return NULL;
}
затем, вызывавшая функция эту функцию, заливает значение err в другую переменную, и освобождает память

Code: Select all

delete [] *err;
с компилятором от Vsual studio это работает.
Но для mingw32, если я освобождаю память, то прога вылетает, если память не освобождать, то все работает нормально.
regards,
Alexander Saprykin
www.wxwidgets.ru

Kvaz1r
Earned some good credits
Earned some good credits
Posts: 119
Joined: Tue Jun 07, 2016 1:07 pm

Re: как правильно вернуть из DLL строку

Post by Kvaz1r » Wed Apr 24, 2019 7:11 pm

Не специалист, но нашел на SO вот такой вопрос:
Is it bad practice to allocate memory in a DLL and give a pointer to it to a client app?

Если подытожить то рекомендуют освобождать память там-же где и выделять.

User avatar
cutecode
Filthy Rich wx Solver
Filthy Rich wx Solver
Posts: 227
Joined: Fri Dec 09, 2016 7:28 am
Contact:

Re: как правильно вернуть из DLL строку

Post by cutecode » Wed Apr 24, 2019 9:02 pm

ндаас,

походу у меня действительно разные версии alloc/free
придется все переделывать
СПС
regards,
Alexander Saprykin
www.wxwidgets.ru

User avatar
doublemax
Moderator
Moderator
Posts: 13879
Joined: Fri Apr 21, 2006 8:03 pm
Location: $FCE2

Re: как правильно вернуть из DLL строку

Post by doublemax » Thu Apr 25, 2019 12:31 pm

Does the calling function also use wxWidgets? If yes, why not pass a wxString* or wxString& to the function and write into that?
Use the source, Luke!

User avatar
cutecode
Filthy Rich wx Solver
Filthy Rich wx Solver
Posts: 227
Joined: Fri Dec 09, 2016 7:28 am
Contact:

Re: как правильно вернуть из DLL строку

Post by cutecode » Thu Apr 25, 2019 12:53 pm

doublemax wrote:
Thu Apr 25, 2019 12:31 pm
Does the calling function also use wxWidgets?
hi,

EXE - yes,
but DLL can't use wxWidgets

I've rewritten my code by allocating memory in EXE and passing this pointer to DLL

TY
regards,
Alexander Saprykin
www.wxwidgets.ru

User avatar
doublemax
Moderator
Moderator
Posts: 13879
Joined: Fri Apr 21, 2006 8:03 pm
Location: $FCE2

Re: как правильно вернуть из DLL строку

Post by doublemax » Thu Apr 25, 2019 12:56 pm

EXE - yes,
but DLL can't use wxWidgets
But there is a wxString in that DLL code.
Use the source, Luke!

User avatar
cutecode
Filthy Rich wx Solver
Filthy Rich wx Solver
Posts: 227
Joined: Fri Dec 09, 2016 7:28 am
Contact:

Re: как правильно вернуть из DLL строку

Post by cutecode » Thu Apr 25, 2019 7:18 pm

doublemax wrote:
Thu Apr 25, 2019 12:56 pm
EXE - yes,
but DLL can't use wxWidgets
But there is a wxString in that DLL code.

oooops, Yes it is.))))

But I want to solve this problem not using wxWidgets.

This is an intergration DLL for my program, for other programmers. Not sure all programers can use wxWidgets
regards,
Alexander Saprykin
www.wxwidgets.ru

ONEEYEMAN
Part Of The Furniture
Part Of The Furniture
Posts: 3353
Joined: Sat Apr 16, 2005 7:22 am
Location: USA, Ukraine

Re: как правильно вернуть из DLL строку

Post by ONEEYEMAN » Thu Apr 25, 2019 8:27 pm

Hi,
Why even use "wchar_t *"?
Why not simply "char *"?

Or even better - std::{w}string? We are talking C++ here...

Thank you.

User avatar
cutecode
Filthy Rich wx Solver
Filthy Rich wx Solver
Posts: 227
Joined: Fri Dec 09, 2016 7:28 am
Contact:

Re: как правильно вернуть из DLL строку

Post by cutecode » Fri Apr 26, 2019 5:49 am

hello,

I remaked it to std::wstring&

Thank you
regards,
Alexander Saprykin
www.wxwidgets.ru

Post Reply