Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Включение в проект объектных файлов и библиотек 
:(
    Опции темы
Charlie
Дата 2.11.2009, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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:06
PM MAIL   Вверх
Partizan
Дата 3.11.2009, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

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



студия не осилила найти объектник...output билда бы посмотреть


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Charlie
Дата 4.11.2009, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


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

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


 




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


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

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