Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > использовать my.h и my.cpp в CBuilder\Include


Автор: W03L 3.9.2007, 06:53
Привет.
Проблемка такая:
создал свой модуль, кусок кода:
my.h
#ifndef myH
#define myH

#include <SysUtils.hpp>
//---------------------------------------------------------------------------
void f_msg(AnsiString mess,char kind,HWND h=NULL,AnsiString cap="Ошибка данных");
//---------------------------------------------------------------------------
#endif

my.cpp
#pragma hdrstop
#include "my.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
//---------------------------------------------------------------------------
void f_msg(AnsiString mess,char kind,HWND h,AnsiString cap)
{
  UINT mt=0;
  if (kind=='e') mt=MB_ICONERROR;
  else
  if (kind=='w') mt=MB_ICONWARNING;
  else
  if (kind=='i') mt=MB_ICONINFORMATION;
  MessageBox(h,mess.c_str(),cap.c_str(),mt);
}
//---------------------------------------------------------------------------

Скопировал это в папку builderа Borland\CBuilder6\Include\.
Создал новое приложение и там поставил #include <my.h>
При запуске он почему-то не находит тело функции f_msg
пишет [Linker Error] Unresolved external 'f_msg...
хотя компиляция проходит нормально.

Подскажите как сделать чтобы можно было юзать MY.H в стандартном пути #include <>?

Автор: JackYF 3.9.2007, 07:56
Цитата(W03L @  3.9.2007,  06:53 Найти цитируемый пост)
пишет [Linker Error] Unresolved external 'f_msg...

эх... это проблема неподключения .cpp - файла. Если бы оно не увидело .h-файл, компилятор ругнулся бы значительно раньше.
Добавь .cpp - файл в проект.

И .cpp-файлы никто в Include, а тем более системные, не ложит.

Автор: vmark 3.9.2007, 08:23
хедер и так прога найдет , она у тебя не видет срр .... добавь его в проект и будет счастье ... smile , в твоем случае прога ищет либу ...

Автор: Lazin 3.9.2007, 10:41
Перемести тело ф-ии в заголовочный файл
зы
как вариант, но такая практика - полнейшая дурь. Свой код не стоит смешивать со стандартными библиотеками, лучше положить в папку с проектом, а то потом запаришся искать, и при переносе проекта на другой комп кой-чего будет нехватать. А реализация кода ф-ии в заголовочном файле повлечёт излишние перекомпиляции при изменении кода.

Автор: W03L 4.9.2007, 04:01
Просто у меня многие проекты будут использовать этот модуль. Если хранить его в каждом - это занимает место и если я чего-нибудь изменю в my.h или my.cpp, то везде надо менять, а так он будет в одном месте со стандартным путём.
Его надо как-то зарегестрировать в билдере (типа компоненты), но как я не знаю :(

Автор: Lazin 4.9.2007, 08:03
Создай статическую библиотеку, и линкуй ко всем проектам. 
Цитата

Если хранить его в каждом - это занимает место и если я чего-нибудь изменю в my.h или my.cpp, то везде надо менять, а так он будет в одном месте со стандартным путём.

6-й билдер создаёт в папке Projects папки Lib и Bpl. Подразумевается, что либы туда будут ложить.
PS
в vcl есть стандартные диалоги, которые делают примерно то-же что и твой код. 
PPS
Dialogs.hpp

Автор: W03L 5.9.2007, 03:34
Сенкс, статическая библиотека нормально работает smile

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