C ++ прагма раздел и импорт - PullRequest
       16

C ++ прагма раздел и импорт

0 голосов
/ 14 сентября 2018

Я пытался разместить свой код в двух разделах, первый был разделом .code, а другой - разделом .stub. Это работает следующим образом: 1- Основная функция находится в разделе .stub 2- функция теста помещена в секцию .code 3- Main начинается с (.stub) и вызывает testfunction () из (.code). Вот код:

#include "stdafx.h"
#include <windows.h>
#include <iostream>
using namespace std;
#include <string>

/* Declare .code as a read/write/execute segment */
#pragma section(".code",execute, read, write)
#pragma comment(linker,"/SECTION:.code,ERW")

/* .code segment begin (all generated executable code below will go in .code segment ) */
#pragma code_seg(".code")

void testfunction() { printf("IAM now in .code\n"); }
/*=======================================================================*/
// .stub SECTION
#pragma section(".stub", execute, read, write)
#pragma code_seg(".stub")

void _tmain()
{
    cout<<"I am main from .stup section\n"; 
    testfunction();
    return ;
}

Без iostream, строки и пространства имен std все хорошо. Проблема начинается, когда я пытаюсь #include и сразу после stdafx.h

Приходит следующая ошибка:

Error   7   error C2193: 'void __cdecl `dynamic atexit destructor for 'public: static std::_Generic_error_category std::_Error_objects<int>::_Generic_object''(void)' : already in a segment    C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\xmemory0 627 1   
Error   6   error C2193: 'void __cdecl `dynamic atexit destructor for 'public: static std::_Iostream_error_category std::_Error_objects<int>::_Iostream_object''(void)' : already in a segment  C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\xmemory0 627 1   
Error   5   error C2193: 'void __cdecl `dynamic atexit destructor for 'public: static std::_System_error_category std::_Error_objects<int>::_System_object''(void)' : already in a segment  C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\xmemory0 627 1   mal

При поиске ошибки C2193 я обнаружил, что она появляется, когда функция находится во многих разделах. Зная это, я переместил iostream, string и namespace std в раздел .stub. Теперь все работает. Я пришел к выводу, что включение он-лайн делает его включенным во весь следующий раздел!

Теперь, мой вопрос

  1. Как сделать включение только в одном разделе? (При условии, что мой вывод правильный).

  2. Если так, то почему windows.h не сделал ту же ошибку?

Я надеюсь найти ответ как можно скорее.

...