operator new

6 отговора 336 прегледа
#1

operator new

исмам да предефинирам опертора в DLL.работата е там , че ми изплюва

Compiler Error C2375
'function' : redefinition; different linkage

The specified function was already declared with a different linkage specifier.

The following is an example of this error:

extern void func( void );
static void func( void ); // error

какво да правя?

Отговор
в отговор на Packoлниkoв #2

Re: operator new

Напиши си DLL-ката на асемблер. По този начин няма да трябва да линкваш срещу C++ runtime-а, и няма да има предефиниция.

Отговор
в отговор на ironcode #3

Re: operator new

Не е нужно това. Ако се направи като хората предефинирането, си работи.

Расколников: дай малко сорс, а също така дай и точната грешка, която ти изкарва компилатора, а не обяснението от MSDN-a.

Отговор
в отговор на Pesho® #4

Re: извадки от сорс

//в memory.h
#ifdef _Dll
#define _Export __declspec(dllexport)
#else
#define _Export __declspec(dllimport)
#endif

_Export void* operator new(unsigned int uiBytes);
_Export void operator delete(void *pvPtr);

//в memory.cpp
#define _Dll
#include "memory.h"
_Export void* operator new(unsigned int uiBytes)
{
//ала-бала
}
_Export void operator delete(void *pvPtr)
{
//ала-бала
}

сега ще получа четири грешки като посочената , по общо казано как да затворя operator new в dll и после да го ползвам от приложения заредили , тоз dll?

Отговор
в отговор на Packoлниkoв #5

Re: извадки от сорс

по общо казано как да затворя operator new в dll и после да го ползвам от приложения заредили , тоз dll?

Мисля, че не можеш да направиш такова нещо. По-скоро в DLL-а направи някакви нормални функции, които алокират и деалокират, и после в приложенето overload-ни operator new() и operator delete(), така че да ползват въпросните функции.

P.S. Убедил съм се, че overload на глобалния operator new() рядко е добра практика. Може би единственото оправдание е, ако пишеш debug алокатор.

Отговор
в отговор на Packoлниkoв #6

Re: operator new

Погледни cppbook на Stroustrup. Там имаше обяснено как да претаковаш new на чисто С++, без да се занимаваш с асемблер. Не помня как се прави точно, но съм го правил като съм гледал там, и знам че работи.

Със здраве!


Извинявам се, погледнах и се оказва че съм претаковал exception-а на въпросния оператор. Все пак погледни въпросната книга, сигурно ще намериш нещо по въпроса.
Успех!


Мечтата е мисъл, мисълта е идея, всяка идея се реализира. Аз не мечтая, а реализирам идеите си.

Редактирано от Duncan Griffin на

Отговор
в отговор на Packoлниkoв #7

Re: operator new

Rabotata e tam, che new i delete sa definirani v tochno opredeleni DLLs (ne si im spomniam imenata), no gi ima zadyljitelno i v Debug i v Release. Mislia che byrkash pri predefiniraneto - ne se pravi taka, no ne znam dali shte imam vreme da ti ponapisha malko kod. Derzai.

Отговор