Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Интеграция ассемблера в Visual Studio 2008 
:(
    Опции темы
Charlie
Дата 2.11.2009, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 2.11.2009

Репутация: нет
Всего: нет



Мне необходимо было написать функцию на ассемблере и использовать её (объектный файл с ней) в коде С++ проекта Windows Forms  на Microsoft Visual Studio Team System 2008.



 Я делал это так:

            Visual Studio 2008 NASM integration


In order to use nasm seamlessly in your VS2k8, follow the steps below. 

1. First install nasm by running its installer
2. copy nasm.rules to c:\Program Files\Microsoft Visual Studio 2008\VC\VCProjectDefaults
3. Start Visual Studio 2008
4. go to Tools->Options->VC++ Directories
5. click on Show Directories for Executables
6. add C:\Program Files\NASM to the list of paths
7. Open a solution that you want to use NASM with
8. Right click on the project name and select Custom Build Rules
9. Check the box next to the NASM line
10. Add any .asm files to the project
11. click on build to test

 Содержание файла nasm.rules:

Код

<?xml version="1.0" encoding="utf-8"?>
<VisualStudioToolFile
    Name="Netwide Macro Assembler"
    Version="8.00"
    >
    <Rules>
        <CustomBuildRule
            Name="NASM"
            DisplayName="Netwide Macro Assembler"
            CommandLine="nasm.exe -f win32 -Xvc [AllOptions] [AdditionalOptions] [Inputs]"
            Outputs="[$ObjectFileName]"
            FileExtensions="*.asm"
            ExecutionDescription="Assembling..."
            >
            <Properties>
                <StringProperty
                    Name="ObjectFileName"
                    DisplayName="Object File Name"
                    PropertyPageName="Object File"
                    Description="Specifies the name of the output object file.     (-o [file])"
                    HelpURL="http://www.nasm.us/doc/"
                    Switch="-o &quot;[value]&quot;"
                    DefaultValue="$(IntDir)\$(InputName).obj"
                />
                <StringProperty
                    Name="PreprocessorDefinitions"
                    DisplayName="Preprocessor Definitions"
                    Description="Defines a text macro with the given name.     (-D[symbol])"
                    HelpURL="http://www.nasm.us/doc/"
                    Switch="-D[value]"
                    Delimited="false"
                    Inheritable="true"
                />
                <StringProperty
                    Name="UndefinePreprocessorDefinitions"
                    DisplayName="Undefine Preprocessor Definitions"
                    Description="Undefines a text macro with the given name.     (-U[symbol])"
                    HelpURL="http://www.nasm.us/doc/"
                    Switch="-U[value]"
                    Delimited="false"
                    Inheritable="true"
                />
                <StringProperty
                    Name="AssembledCodeListingFile"
                    DisplayName="Assembled Code Listing File"
                    PropertyPageName="Listing File"
                    Description="Generates an assembled code listing file.     (-l [file])"
                    HelpURL="http://www.nasm.us/doc/"
                    Switch="-l &quot;[value]&quot;"
                />
                <StringProperty
                    Name="IncludePaths"
                    DisplayName="Include Paths"
                    Description="Sets path for include file.     (-I[path])"
                    HelpURL="http://www.nasm.us/doc/"
                    Switch="-I[value]"
                    Delimited="false"
                    Inheritable="true"
                />
                <BooleanProperty
                    Name="TreatWarningsAsErrors"
                    DisplayName="Treat Warnings As Errors"
                    Description="Returns an error code if warnings are generated.     (-Werror)"
                    HelpURL="http://www.nasm.us/doc/"
                    Switch="-Werror"
                />
                <BooleanProperty
                    Name="GenerateDebugInformation"
                    DisplayName="Generate Debug Information"
                    Description="Generates Debug Information.     (-g)"
                    HelpURL="http://www.nasm.us/doc/"
                    Switch="-g"
                    DefaultValue="true"
                />
                
            </Properties>
        </CustomBuildRule>
    </Rules>
</VisualStudioToolFile>

_________________________________________________

 В *.asm файле функция объявлена так:

 global  _myFunc@4

 В файле Form1.h я написал следующее объявление:

Код

 extern "C" myStruct * __stdcall myFunc(int) ;


 Когда добавляю к проекту *.asm файл и запускаю построение проекта объектный файл скомпилированый nasm.exe появляется в папке  
D:\NASM\МОИ ПРОГРАММЫ\Visual Studio 2008\Projects\Memory Damp\Memory Damp\Debug
__________________________________________________

 Но при компоновке получаются следующие ошибки:

Ошибка    3    error LNK2028: ссылка на неразрешенную лексему (0A00048D) "extern "C" struct myStruct * __stdcall myFunc(int)" (?myFunc@@$$J14YGPAUmyStruct@@H@Z) в функции "private: void __clrcall MemoryDamp::Form1::button1_Click(class System::Object ^,class System::EventArgs ^)" (?button1_Click@Form1@MemoryDamp@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z)    Memory Damp.obj    Memory Damp

Ошибка    4    error LNK2028: ссылка на неразрешенную лексему (0A0004AE) "void __stdcall _com_issue_error(long)" (?_com_issue_error@@$$FYGXJ@Z) в функции "void __cdecl _com_util::CheckError(long)" (?CheckError@_com_util@@$$FYAXJ@Z)    Memory Damp.obj    Memory Damp

Ошибка    5    error LNK2019: ссылка на неразрешенный внешний символ "void __stdcall _com_issue_error(long)" (?_com_issue_error@@$$FYGXJ@Z) в функции "void __cdecl _com_util::CheckError(long)" (?CheckError@_com_util@@$$FYAXJ@Z)    Memory Damp.obj    Memory Damp

Ошибка    6    error LNK2019: ссылка на неразрешенный внешний символ "extern "C" struct myStruct * __stdcall myFunc(int)" (?myFunc@@$$J14YGPAUmyStruct@@H@Z) в функции "private: void __clrcall MemoryDamp::Form1::button1_Click(class System::Object ^,class System::EventArgs ^)" (?button1_Click@Form1@MemoryDamp@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z)    Memory Damp.obj    Memory Damp

Ошибка    7    fatal error LNK1120: 4 неразрешенных внешних элементов    D:\NASM\МОИ ПРОГРАММЫ\Visual Studio 2008\Projects\Memory Damp\Debug\Memory Damp.exe    Memory Damp

 smile  smile  smile 

Это сообщение отредактировал(а) Charlie - 4.11.2009, 20:08
PM MAIL   Вверх
Charlie
Дата 4.11.2009, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 2.11.2009

Репутация: нет
Всего: нет



 Помогли на другом форуме.

 Делаем вставку unmanaged кода в код managed:

Код

using namespace System;

extern "C" myStruct * __stdcall myFunc(int) ;

#pragma managed(push, off)
#pragma comment(lib,"comsupp.lib")

    myStruct * intermediateFunc(int a)
       { return myFunc(a) ; }

#pragma managed(pop)


 Правда вот беда:

При запуске программы появляется окно:

Debug Assertion Failed !

Program: ...\...\Memory Damp.exe (моя программа)
File: f:\dd\vctools\crt_bld\self_x86\crt\src\dbgheap.c
Line: 1511
Expression: _CrtIsValidHeapPointer(UserData)
...

Файл dbgheap.c :
Line: 1511 _ASSERTE(_CrtIsValidHeapPointer(pUserData));

Странно, код который я написал ничего не делает пока я не нажму кнопку. А тут при запуске программы.  smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0626 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.