Article View: borland.public.cppbuilder.migration
Article #127Re: C++ Builer 2007 problem
From: Leo Siefert
Date: Thu, 03 Jul 2008 11:38
Date: Thu, 03 Jul 2008 11:38
53 lines
2992 bytes
2992 bytes
Michael Corby wrote:
>static_cast<TDBEdit*>(fName->Components[n])->ReadOnly = false;
>
>[ILINK32 Error] Error: Unresolved external '__fastcall
>Dbctrls::TDBEdit::SetReadOnly(bool)'
>referenced from C:\USERS\PUBLIC\DOCUMENTS\RAD
>STUDIO\PROJECTS\DLLFILES\DEBUG_BUILD\DLLFORM.OBJ
The fact that you have a linker error shows that your code has been
compiled without errors.
The linker error indicates that it is unable to locate the VCL library
module containing the code for the DBEdit control.
If you have imported the project from an earlier version of C++
builder you should check the imported library paths to make sure that
they are correct.
If this happens in a new project, then either you have overridden the
default settings of the IDE or the install is bad.
I tested the type of code you are using in a simple project by
dropping a TDBEdit control on the form and adding an OnClick handler
with this code:
void __fastcall TForm3::DBEdit1Click(TObject *Sender)
{
static_cast<TDBEdit*>(Sender)->ReadOnly = false;
}
The project builds correctly.
You could try doing the same in your copy of C++ Builder 2007. If that
works (if it links with no errors) then you know that the problem is
somewhere in the project file for the project that does not work. If
that fails, then I suggest that you either uninstall and reinstall C++
Builder or perform a repair install to try to correct the problem.
If the problem is in your project settings, you can compare the paths
and the list of runtime packages in the project options dialog for
your old project against those in the one that works. Or, you can just
create a new project and add to it the files from your old project.
BTW - it is safer (but slower) to use a dynamic_cast<> than a
static_cast<> in situations like this unless you are certain that your
code ensures that only TDBEdit pointers can be contained in the array.
If only TDBEdit pointers can be in the array, then it would be cleaner
and more transparent to declare it as an array of TDBEdit pointers and
avoid the cast altogether. A cast is often a sign that your code can
be improved.
- Leo
Technical Details
Message-ID:
<egdp64pkvj2ufp2cj6uuj92530sfdoe3qk@4ax.com>Path:
arc1-ca.pugleaf.net!g2news1.google.com!news4.google.com!feeder.news-service.com!news.isoc.lu!newsgroups.borland.com!not-for-mailReferences:
<486bbcd3@newsgroups.borland.com>Show Full Headers
Complete Article Headers
X-Google-Thread: 110f51,fb2c2c2025b1b3f9 X-Google-Attributes: gid110f51,domainid0,public,usenet X-Google-Language: ENGLISH,ASCII-7-bit From: Leo Siefert <lIHATESPAMsiefert@senate.michigan.gov> Newsgroups: borland.public.cppbuilder.migration Subject: Re: C++ Builer 2007 problem Date: Thu, 03 Jul 2008 07:38:37 -0400 Message-ID: <egdp64pkvj2ufp2cj6uuj92530sfdoe3qk@4ax.com> References: <486bbcd3@newsgroups.borland.com> X-Newsreader: Forte Agent 3.3/32.846 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit NNTP-Posting-Host: 198.109.173.45 X-Trace: newsgroups.borland.com 1215085116 198.109.173.45 (3 Jul 2008 04:38:36 -0700) Lines: 53 Path: arc1-ca.pugleaf.net!g2news1.google.com!news4.google.com!feeder.news-service.com!news.isoc.lu!newsgroups.borland.com!not-for-mail