Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Функции разнесённые по cpp и h не видны


Автор: Arks 22.7.2006, 17:18
Ошибка вылазит:
engine_tester error LNK2001: unresolved external symbol "bool __cdecl LoadTextureFromFile(class System::String __gc *,unsigned int __gc &,int)" (?LoadTextureFromFile@@$$FYA_NP$AAVString@System@@A$AAIH@Z)

Файл textures.h:
Код

#pragma once

#include "stdafx.h"

bool LoadTextureFromFile(String *filename, UInt32 &Texture, Int32 TextureQuality);


Файл textures.cpp:
Код

#include "stdafx.h"
#include "textures.h"

// Вспомогательные типы данных, функции
...

bool LoadTextureFromFile(System::String *filename, UInt32 &Texture, Int32 TextureQuality)
{
  BITMAP_FILE_PTR bmp;
  //StringBuilder *str = new StringBuilder(filename);
  //Char fname[] = filename->ToCharArray();
  //Char __pin *fn = &filename[0];//&fname[0];
  /*for(int i=0; i<filename->Length; i++)
  {
    fn[i] = filename->get_Chars[i];
  }
  fn[i] = 0;*/
  char __pin *fn = (char __gc*)filename;
  LoadBitmap(bmp,fn);
  glBindTexture(GL_TEXTURE_2D,Texture);
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,TextureQuality);
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,TextureQuality);
  glTexImage2D(GL_TEXTURE_2D,0,3,bmp->bitmapinfoheader.biWidth,bmp->bitmapinfoheader.biHeight,0,GL_RGB,GL_UNSIGNED_BYTE,bmp->buffer);
  UnloadBitmap(bmp);
  return true;
}
 

Автор: mr.DUDA 22.7.2006, 20:45
Это, по ходу, относится совсем не к .NET/C#...

Просто в проекте, использующем данную функцию (LoadTextureFromFile) не была подключена библиотека (*.lib - файл). Решается это двумя способами:

- добавляем наш lib-файл в настройках проекта (секция Linker, раздел Additional Libraries)
- или добавляем в любой cpp-исходник директиву препроцессора #pragma comment (lib:имя_библиотеки.lib) 

Автор: Arks 23.7.2006, 10:22
Какая библиотека?
LoadTextureFromFile моя функция самописная. Описание её в .h файле, а тело в .cpp.
Функция используется в файле map.h. А файл textures.h подключается там с помощью #include.

К .NET это относится имхо. Просто подобные ошибки выдаются и когда пишешь класс в .h, а методы реализуешь в .cpp. Хотя может дело в namespace'ах? Хотя в данном случае никаких namespace'ов не определенно.  

Автор: mr.DUDA 23.7.2006, 12:09
Может, в объявлении функции нужно вместо:

Код
bool LoadTextureFromFile(String *filename, UInt32 &Texture, Int32 TextureQuality);


сделать так же как в в .cpp:

Код
bool LoadTextureFromFile(System::String *filename, UInt32 &Texture, Int32 TextureQuality)


? 

Автор: Arks 23.7.2006, 12:55
Нет. Таже ошибка выдаётся 

Автор: mr.DUDA 23.7.2006, 14:50
Arks, а cpp-файл в проект включен ? (глупый вопрос, конечно) 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)