|
Hi,
I'm using WTL7 (also tried WTL71) for a project that has to be kept small, so I'm using ATL_MIN_CRT when doing the release build, this works fine in VC6, no compile or link errors.
But, here's the problem, if I try to upgrade the project to VS.NET2003, the release build will not link properly, giving the following errors:
Linking...
LIBCMT.lib(crt0dat.obj) : error LNK2005: __osplatform already defined in atlmincrt.lib(atlinit.obj)
LIBCMT.lib(crt0.obj) : error LNK2019: unresolved external symbol _main referenced in function _mainCRTStartup
I know this is saying that something is causing the compiler/linker to use CRT, which fails due to ATL_MIN_CRT. Skipping ATL_MIN_CRT is not an option.
I have checked the project settings and everything seems to be correctly upgraded from VS6 to VS.NET2003 and the code haven't changed.
What could be the problem? Is it still a matter of trying to track down what function call is pulling in the CRT lib? This is anoying since, well, it worked before.
Any ideas or things to keep in mind when working with WTL and VS.NET2003?
Cheers!
|
|
|
|
|
OK, found it. I had an atoi() call somewhere, replacing that with StrToInt() did the trick. Strange that it worked in VS6 but not VS.NET2003.
Cheers
|
|
|
|
|
I believe you can find these dependencies quite easy. Link dynamically against the CRT without ATL_MIN_CRT. Launch the Dependency Walker (Depends.exe in your VS.NET tools directory), and open your binary with it. Locate the MSVCRT.DLL entry in the tree view and select it. On the right hand side you see two list views with function entry points. The top list view contains the functions which you import from the selected DLL. From there on, it's just a matter of Find in Files to rid yourself of the offending function call(s).
--
Weiter, weiter, ins verderben.
Wir müssen leben bis wir sterben.
|
|
|
|
|
Nice, I did not know this, that makes it a lot easier. Thanks!
|
|
|
|
|
thanks mr Jörgen for this great help
-----------------------------
"I Think It Will Help"
-----------------------------
Alok Gupta
visit me at http://www.thisisalok.tk
|
|
|
|
|
|
Well, upon further testing my code works just fine when the service is register and started, so I'm guessing the problem comes in when trying to run the service in debug mode in vs.net. Anyone have link on how to debug a service? It seems that just unregistering the service, compiling in debug mode and then running it doesn't work correctly. I haven't fully traced into the ATL code yet though.
|
|
|
|
|
could anyone give me information on: how to access database in ATL (using visual c++)?
thanks
|
|
|
|
|
|
Thanks! but to use OLEDB: Do u need MFC support? I want something without MFC support.
|
|
|
|
|
Nope, you don't need MFC.
BTW, there was a beginners' article for using OLEDB templates here on CP. Just search for OLEDB and I am sure you will find it.
My programming blahblahblah blog. If you ever find anything useful here, please let me know to remove it.
|
|
|
|
|
Hello,
ATL does not provide any intrinsic database access functionalities. You acess any database system of your choice using the APIs provided by that database system.
However, if you want to access databases using ADO (Active Database Objects) (which is COM-based), you would import the Type Library of ADO (using the #import statement) and then connect to the database of your choice via the appropriate connection string.
Note that your database system must also support ADO (most do anyway). Examples of database systems that support ADO are : MS Access, Oracle, SQL Server, Sybase.
Regards,
Bio.
|
|
|
|
|
Thanks for the info. I will look for ADO, and if I could not find anything useful I will contact u.
|
|
|
|
|
I am new to COM/ATL,i have very beginner question, i want to know ho wto create events and raise that event in From ATL DLL.
thanks for every Suggestion
-----------------------------
"I Think It Will Help"
-----------------------------
Alok Gupta
visit me at http://www.thisisalok.tk
|
|
|
|
|
Yeah,
Sorry i found it myself,as AtlCom wizard itslef Provide support for Event,you just mere have to Check the IConnectionPoint Box ,rets of thing will be handle by Wizard itself
-----------------------------
"I Think It Will Help"
-----------------------------
Alok Gupta
visit me at http://www.thisisalok.tk
|
|
|
|
|
I have develop a List view control. Control has propert Columns which implements the IColumns interface. Now i want to persist this property by including it in Prop map.
Below is the code
<br />
BEGIN_PROP_MAP(CGridAdv)<br />
PROP_ENTRY("Columns", 14, CLSID_ColumnsProp)<br />
END_PROP_MAP()<br />
After doing that control crashes whenever container try to dislay it.
Can anyone tell me how to do that?
thanks
qur
|
|
|
|
|
Is there a way to get ostream_iterator to work with pair?
typedef int Number;
typedef float Voltage;
typedef pair<Number, Voltage> SamplePair;
std::ostream& operator<<(std::ostream& stream, const SamplePair& sample)
{
return stream << "Number: " << sample.first << ", Voltage: " << sample.second;
}
void ostreamIteratorPairTest()
{
typedef vector<SamplePair> Samples;
Samples samples;
for (int i = 1; i <= 10; i++)
{
SamplePair sample(i, float(i));
samples.push_back(sample);
cout << sample << endl;
}
copy (samples.begin(), samples.end(),
ostream_iterator<Sample>(cout, "\n"));
}
int main(int argc, char* argv[])
{
ostreamIteratorTest();
return 0;
}
In VC6 I get the following error:
c:\program files\microsoft visual studio\vc98\include\xutility(19) : error C2679: binary '=' : no operator defined which takes a right-hand operand of type 'struct std::pair<int,float>' (or there is no acceptable conversion)
C:\Program Files\Microsoft Visual Studio\MyProjects\ConsoleTest\ConsoleTest.cpp(120) : see reference to function template instantiation 'class std::ostream_iterator<struct Sample,char,struct std::char_traits<char> > __cdecl std::copy(struct
std::pair<int,float> *,struct std::pair<int,float> *,class std::ostream_iterator<struct Sample,char,struct std::char_traits<char> >)' being compiled
Error executing cl.exe.
In VC7.1 I get a slightly different error saying that operator << hasn't been defined for pair when it has.
Kevin
|
|
|
|
|
Umm, you've stumbled on a particular tricky issue with argument-dependent lookup (ADL, also called Koenig lookup, if you don't know what this is just ask).
ostream_iterator tries to find operator<< in the namespace where ostream and SamplePair belong, namely std --SamplePair is just a typedef of std::pair , so it is really std::pair that's being used. And you've defined your operator<< in the global namespace, hence the problem.
One dirty hack is to just define the thing inside namespace std :
#include <iostream>
#include <utility>
#include <vector>
#include <iterator>
typedef int Number;
typedef float Voltage;
using namespace std;
typedef pair<Number, Voltage> SamplePair;
namespace std{
std::ostream& operator<<(std::ostream& stream, const SamplePair& sample)
{
return stream << "Number: " << sample.first << ", Voltage: " << sample.second;
}
}
void ostreamIteratorPairTest()
{
typedef vector<SamplePair> Samples;
Samples samples;
for (int i = 1; i <= 10; i++)
{
SamplePair sample(i, float(i));
samples.push_back(sample);
cout << sample << endl;
}
copy (samples.begin(), samples.end(),
ostream_iterator<SamplePair>(cout, "\n"));
}
int main(int argc, char* argv[])
{
ostreamIteratorPairTest();
return 0;
} But take this into account: strictly speaking, the former is not legal C++; the language does not allow you to overload any function in namespace std . AFAIK there's nothing you can do to prevent this, except turn SamplePair into an actual user-defined type (maybe by inheriting from std::pair and adding the proper constructors.) IMHO, you can just leave the thing as it is, knowing that it is not conformant C++.
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
Want a Boost forum in Code Project? Vote here[^]!
|
|
|
|
|
Joaquín M López Muñoz wrote:
there's nothing you can do to prevent this, except turn SamplePair into an actual user-defined type
Yes, I'd done this anyway. But it would have been nice to be able to just use pair as-is in this context.
This wasn't actually production code, just me conducting research. Although the example was derived from some real code I'd worked on in the past before I'd discovered the "copy to ostream_iterator" technique. I often do this kind of thing after I've finished some real work - investigate how to do something better next time!
Kevin
|
|
|
|
|
Hi,
I'm following the guide in the platform sdk docs, and the information found on http://www.trigeminal.com/usenet to create a unicode WTL application that uses MSLU (Microsoft Layer for Unicode).
The project is created in VS.NET 2003 and WTL version 7.5.4196 (latest) is used. MSLU (unicows) .lib and .dll comes from Feb,2003's PSDK. In the WTL App Wizard, only "view type" in the "user interface features" section was changed to "HTML Page" so that I can get a web browser control hosted.
Then I changed:
_Module.Init(NULL, hInstance);
to:
_Module.Init(NULL, hInstance, &LIBID_ATLLib);
to avoid the LIBID debug assertion problem.
Before compilation, I made the following changes to the project settings:
Use of ATL -> Static Link to ATL
Minimize CRT Use in ATL -> No
Character Set -> Use Unicode
Ignored those libraries mentioned in the psdk guide, and linked to unicows.lib and all previously ignored libraries, as is specified by the guide.
The compiled executable (release build) worked on Windows XP but it generated a kernel32.dll crash on Windows 98. The debug build will complain about a failed assertion at an IsWindow check of m_hWnd. I figured it was because the web browser control window wasn't created.
Then I reset the settings back to get an ANSI build, and it worked on Windows 98. Is it a known problem with MSLU? Is there any way to solve it?
Thanks in advace,
|
|
|
|
|
Hi
I've captured some information about this crash. The crash happens in line 2968 of atlwin.h (microsoft visual studio .net 2003\vc7\atlmfc\include\atlwin.h). It's a "writing to location violation"
The function is:
LRESULT DefWindowProc(UINT uMsg, WPARAM wParam, LPARAM lParam)
{
#ifdef STRICT
// This is where the crash happens
return ::CallWindowProc(m_pfnSuperWindowProc, m_hWnd, uMsg, wParam,
lParam);
#else
return ::CallWindowProc((FARPROC)m_pfnSuperWindowProc, m_hWnd, uMsg,
wParam, lParam);
#endif
}
In the function context, uMsg = 0x0000000d (13), wParam = 0x0000000d (13), lParam = 0x005e0f7c (6164348).
The calling parent is LRESULT CALLBACK CWindowImplBaseT< TBase, TWinTraits >::WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam). And the calling child is unicows.dll!_GodotCallWindowProcW@20() + 0x52 and unicows.dll!_GodotTransmitMessage@44() + 0x1148 There is another unrecognized calling child. Apparently, 0x0d is the WM_GETTEXT message. And the crash happens right there. When
GodotTransmitMessage traps this message.
I saw a little note in the WM_GETTEXT description in PSDK Document:
Windows NT/2000/XP:ANSI applications may have the string in the buffer reduced in size (to a minimum of half that of the wParam value) due to conversion from ANSI to Unicode.
Does this note have something to do with this crash? I do hope someone can try follow my steps and see if it's a problem with MSLU.
Thanks
|
|
|
|
|
I wanted to write a small batch file so that i cud copy the data from
my pc to a remote pc but i fail 2 do...
i know Brilliant Minds wud say me why
md "%date%"
cd "%date%"
xcopy c:\me \\192.168.2.17 -z
exit /B
|
|
|
|
|
Sorry for little rude,
have check the secuirty permission or do u have write permission on remote computer.
if yes,you can use CopyFile api to copy file to remote computer
-----------------------------
"I Think It Will Help"
-----------------------------
Alok Gupta
visit me at http://www.thisisalok.tk
|
|
|
|
|
Hello.
I've posted similar question in the COM forum but got no response.
May be someone in this forum will be able to help.
The question is as follows:
I have an out of process DCOM server, client software, that will be connecting to the server, can be written on any programming language. How do I create/transfer a structure/class between the client and the server?
Any help will be greatly appreciated. I'm pretty mach stuck with this issue since the only solutions that I found, talk about C++ only clients which is not applicable in my case.
|
|
|
|
|
VC++ 6.0 SP5
I have an MFC dialog application and I wanted to expose a COM interface for it so that other apps may call the interface while the dialog is up and running. I wanted to make the application free threaded so that calls to the interface from multiple clients would not be serialised.
I have done this by clicking on the Insert menu in VC6 and selecting 'New ATL Object...'. Once the object was inserted into the project I then edited stdafx.h and replaced _ATL_APARTMENT_THREADED with _ATL_FREE_THREADED. I then changed the ATL class so that it derives from CComObjectRootEx<CComMultiThreadModel>.
Testing has shown that when multiple clients call the interface the calls are all serialised because the ATL object in the dialog application is running on the UI thread. Is there any way in an MFC app to force COM to pick an RPC-managed pool thread rather than do all the work on the UI thread?
Regards
Martin
|
|
|
|
|