operator new
6 отговора
336 прегледа
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
какво да правя?
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
какво да правя?
Re: operator new
Напиши си DLL-ката на асемблер. По този начин няма да трябва да линкваш срещу C++ runtime-а, и няма да има предефиниция.
Re: operator new
Не е нужно това. Ако се направи като хората предефинирането, си работи.
Расколников: дай малко сорс, а също така дай и точната грешка, която ти изкарва компилатора, а не обяснението от MSDN-a.
Расколников: дай малко сорс, а също така дай и точната грешка, която ти изкарва компилатора, а не обяснението от MSDN-a.
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?
#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?
Re: извадки от сорс
по общо казано как да затворя operator new в dll и после да го ползвам от приложения заредили , тоз dll?
Мисля, че не можеш да направиш такова нещо. По-скоро в DLL-а направи някакви нормални функции, които алокират и деалокират, и после в приложенето overload-ни operator new() и operator delete(), така че да ползват въпросните функции.
P.S. Убедил съм се, че overload на глобалния operator new() рядко е добра практика. Може би единственото оправдание е, ако пишеш debug алокатор.
Мисля, че не можеш да направиш такова нещо. По-скоро в DLL-а направи някакви нормални функции, които алокират и деалокират, и после в приложенето overload-ни operator new() и operator delete(), така че да ползват въпросните функции.
P.S. Убедил съм се, че overload на глобалния operator new() рядко е добра практика. Може би единственото оправдание е, ако пишеш debug алокатор.
Re: operator new
Погледни cppbook на Stroustrup. Там имаше обяснено как да претаковаш new на чисто С++, без да се занимаваш с асемблер. Не помня как се прави точно, но съм го правил като съм гледал там, и знам че работи.
Със здраве!
Извинявам се, погледнах и се оказва че съм претаковал exception-а на въпросния оператор. Все пак погледни въпросната книга, сигурно ще намериш нещо по въпроса.
Успех!
Мечтата е мисъл, мисълта е идея, всяка идея се реализира. Аз не мечтая, а реализирам идеите си.
Със здраве!
Извинявам се, погледнах и се оказва че съм претаковал exception-а на въпросния оператор. Все пак погледни въпросната книга, сигурно ще намериш нещо по въпроса.
Успех!
Мечтата е мисъл, мисълта е идея, всяка идея се реализира. Аз не мечтая, а реализирам идеите си.
Редактирано от Duncan Griffin на
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.