🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: borland.public.cppbuilder.migration
Article #127

Re: C++ Builer 2007 problem

#127
From: Leo Siefert
Date: Thu, 03 Jul 2008 11:38
53 lines
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-mail
References: <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