|
finally, I solved it...it turns out I have to override the CDockContext startdrag function, which lock the mouse in the loop so no other window can get mouse message during dragging. Overriding this function was a nightmare...thx for the effort guys, appreciate them alot...
a virtual beer for everyone...cheers
|
|
|
|
|
Microsoft C++ compilers throw the following error
test.cpp
test.cpp(14) : error C2664: 'fred' : cannot convert parameter 1 from 'char ** ' to 'const char ** '
Conversion loses qualifiers
on the program below.
int fred(const char ** arg)
{
return 0;
}
int fred1(const char * arg)
{
return 0;
}
int main(int argc,char **argv)
{
fred1(*argv);
return fred(argv);
}
I am baffled by this error.
As I would expect, the compiler is happy for me to pass a char * to something expecting a
const char * (fred1) so what is its problem with passing a char ** to something expecting a const char **?
I would understand if it complained when I pass a const char ** to something expecting a char **, but this way round should surely work.
There is no problem if fred() expects char const * const *, or even char * const *
I'd be interested to know what other compilers think of this code.
What qualifier does it think is being lost?
|
|
|
|
|
This is an annoying error causing me to have to use casts all over my code. I don't know about others, but I think it good practice to define a function paramater with const if the function is not going to modify it.
And why 'Error' surely 'Warning' would suffice!
|
|
|
|
|
It is correct for this message to be an error, because C++ has much more strict rules for pointer compatibility than C. If my code is compiled as C you get warnings C4090 and C4024 instead of errors. But in this particular case I cannot see what qualifier is being lost. Have you got any other examples where this error is produced for no good reason?
I too use const heavily - whenever I pass pointers or references I make them const unless they really need not to be, and I make this * const in methods as well whenever possible.
I can't ever recall seeing the compiler objecting to passing a non-const something to something expecting a const something anywhere else.
|
|
|
|
|
I believe what you mean to do is say that the data that argv is pointing to will not be changed. As such, you should write it this way (which won't produce an error):
int f(const char* const* a)
{
return 0;
}
int g(const char* a)
{
return 0;
}
int main(int argc, char** argv)
{
g(*argv);
return f(argv);
}
And by the way, GCC also gives an error with the code you posted.
If you decide to become a software engineer, you are signing up to have a 1/2" piece of silicon tell you exactly how stupid you really are for 8 hours a day, 5 days a week
Zac
|
|
|
|
|
Hi. I'm having trouble linking with particular libs. I have an OGL ES app that needs functions in libGLES_CM.dll. I have two versions of this dll and the corrisponding libs. The first I got from the Khronos site. This version works. The second, I'm building from source. This version doesn't. The problem is unresolved externals.
If I look at the lib files in Visual studio, the function names seem to be decorated differently. In the Khronos version, it looks like this...
__imp__glTranslatex._glTranslatex
In the version I build from source, it looks like this...
__imp__glTranslatex@12._glTranslatex@12
What do I need to do to my app or visual studio to be able to link to the second version that I build from source?
Thanks!
|
|
|
|
|
I'm not familiar with the particular libraries or DLLs are using, so I apologise if my comments below are obvious or not helpful.
I think the @12 means your function is being compiled as a __stdcall function. If the function does not have a calling convention specified (e.g. __fastcall or __cdecl) or some equivalent macro (e.g. WINAPI) then your compile options may be selecting a different calling convention from the one intended. (Check for /Gz compile option and try using /Gr instead).
I'd also check such things as your predefined macros (e.g. WIN32 _MSC_VER etc) and other -D options. If the code you are compiling is intended for multiple platforms things like calling conventions are likely to be very sensitive to this, because the code will be trying to cope with different compilers.
Another possible cause of confusion is the method used to build the import library.
You can get quite different results depending on whether you have a .DEF file or not, and whether you make use of the .EXP file or not.
If you don't have a .DEF file, the linker will usually use your functions actual signature for the .LIB file, but if you have a .DEF file you may be able to remove the decoration.
Personally I always use a .DEF file, and put NONAMES everywhere.
It might be an idea to try to locate a makefile for the Khronos version.
|
|
|
|
|
Thanks. I added #define GL_APIENTRY __stdcall to my header file and it seems to have fixed the problem.
|
|
|
|
|
I have a C# console application and it works fine. Now I want to convert it to C++ DLL, which can be imported to SQL Server 2000 as an extended stored procedure.
As you can see from the C# code, in the end, the extended stored procedure will have 4 input parameters:
int iUserID,
string sRequestTime,
string sImageType,
string sFilePath,
and one output parameter int errorCode.
This is my first time to implement extended stored procedure and have no clue on this. Any comments are welcome.
Thanks,
|
|
|
|
|
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.IO;
namespace SaveImagesToSQLServer
{
class Class1
{
[STAThread]
public static int Main(string[] args)
{
int errorCode = 0;
Class1 oMain = new Class1();
string sConStr = "Data Source=YANG;Initial Catalog=NorthWind;Integrated Security = True";
int iUserID = Convert.ToInt32(args[0]);
string sRequestTime = @args[1];
string sImageType = @args[2];
string sFilePath = @args[3];
FileInfo fi = new FileInfo(sFilePath);
FileStream oImg;
BinaryReader oBinaryReader;
byte[] oImgByteArray;
if (fi.Exists)
{
try
{
oImg = new FileStream(sFilePath, FileMode.Open, FileAccess.Read);
oBinaryReader = new BinaryReader(oImg);
oImgByteArray = oBinaryReader.ReadBytes((int)oImg.Length);
oBinaryReader.Close();
oImg.Close();
oMain.SaveImage(sConStr, iUserID, sRequestTime, sImageType, oImgByteArray);
}
catch (Exception e) { Console.WriteLine(e.Message); }
}
else
{
errorCode = 2;
}
return errorCode;
}
public void SaveImage(string sConnectionString,
int iUserID,
string sRequestTime,
string sImageType,
byte[] oImage)
{
SqlConnection oConn = new SqlConnection();
try
{
oConn.ConnectionString = sConnectionString;
oConn.Open();
SqlCommand oCmd = new SqlCommand("dbo.qp_SaveImage", oConn);
oCmd.CommandType = CommandType.StoredProcedure;
oCmd.Parameters.Add(new SqlParameter("@iUserID", SqlDbType.Int));
oCmd.Parameters.Add(new SqlParameter("@vcRequestTime", SqlDbType.VarChar, 100));
oCmd.Parameters.Add(new SqlParameter("@vcImageType", SqlDbType.VarChar, 50));
oCmd.Parameters.Add(new SqlParameter("@imImageFile", SqlDbType.Image, 2147483647));
oCmd.Parameters["@iUserID"].Value = iUserID;
oCmd.Parameters["@vcRequestTime"].Value = sRequestTime;
oCmd.Parameters["@vcImageType"].Value = sImageType;
oCmd.Parameters["@imImageFile"].Value = oImage;
oCmd.ExecuteNonQuery();
}
catch (Exception e) { Console.WriteLine(e.Message); }
finally { if (oConn.State == ConnectionState.Open) { oConn.Close(); } }
}
}
}
-- modified at 13:02 Wednesday 16th August, 2006
|
|
|
|
|
i need to implement a list box which supports selection of multiple items in the list at a time, instead of a single item, also i should be able to select the items in the listbox by using ctrl+click or shift+click windows functionality. how can i do this?? any link or sample code available??
thanx in advance
kumar_windows
|
|
|
|
|
do you need to write a list box from scratch, or can you use the one that does all this (and more) and is built into every copy of Windows ? ie. CListBox
|
|
|
|
|
i can use CListBox, from scratch is not required
thanx in advance
kumar_windows
|
|
|
|
|
kumar_windows wrote: i need to implement a list box which supports selection of multiple items in the list at a time, instead of a single item, also i should be able to select the items in the listbox by using ctrl+click or shift+click windows functionality. how can i do this??
This is the default behavior.
"Money talks. When my money starts to talk, I get a bill to shut it up." - Frank
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
Hi All,
I have a structure that contains a list of function delegates. Each of the delegates do something different. Depending on how the parent class is initialised, depends on which of delegates is populated.
Now the question is, can I overload the '->' operator, so that the calling code can call one of the delegates in the structure by calling the same name.
e.g.
class X { struct y { fastdelegate someMemberDelegateOfY; ... } ... }
{
X myX;
myX->someMemberDelegateOfY (parameters,for,delegate,in,struct,y);
}
Then when the code executes, it will call the delegate in the structure.
Is this possible, and if so how?
thanks,
Rich
"Programming today is a race between software engineers striving to build bigger and
better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far the Universe is winning." -- Rich Cook
|
|
|
|
|
function pointer correct as is
X x
(x.*p)()
Kuphryn
|
|
|
|
|
RichardS wrote: Is this possible, and if so how?
Yes.
class X
{
public:
int getInt() { return 0; }
};
class Y
{
public:
X* operator->() { return &_x; }
private:
X _x;
};
int main()
{
Y y;
return y->getInt();
}
The restriction on overloading -> is that it must return a pointer of some kind.
If you decide to become a software engineer, you are signing up to have a 1/2" piece of silicon tell you exactly how stupid you really are for 8 hours a day, 5 days a week
Zac
|
|
|
|
|
Thanks, works great
Rich
"Programming today is a race between software engineers striving to build bigger and
better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far the Universe is winning." -- Rich Cook
|
|
|
|
|
( on vs.net 2003 )
I have a window hierarchy that eventually contains an html browser ( IWebBrowser2 ) in a controlbar ( a COXSizeControlBar from Dundas ).
COXSizeControlBar
- a child dialog
- 2 buttons
- Browser window ( Gary R. Wheeler's SimpleBrowser, from CP )
When I show the COXSizeControlBar ( with ShowControlBar ), the Browser window is not redrawn ( but the other controls are drawn properly ), but there's a flicker where I can see the HTML, but it's immediatly erase.
On MSDN ( I can find it on my local copy, but not on the msdn site ), there is an article regarding painting problems when using the CHTMLView, the solution is to add WS_CLIPCHILDREN to the derived CView. They write that this should be fixed in vs.net.
I'm not certain how and/or to fix this.
I think it's related to the WS_CLIPCHILDREN flag, but, I admit it, I never really understood how that flag ( and the WS_CLIPSIBLING ) works.
Is there a tutorial somewhere that really explain what those 2 flags do ( other then re-phrasing what MSDN write ) ?
Any ideas ?
Thanks.
|
|
|
|
|
Hi there,
Can anyone tell me what is the time out for a TCP socket connection if there is no activity? I have a socket connection to a server that for no reason we loose the connection and I sometimes we reconnect automaticaly and sometimes it does not reconnect for a long period of time (10 minutes or so). I appreciate any suggestions.
Nahitan
|
|
|
|
|
nahitan wrote: Can anyone tell me what is the time out for a TCP socket connection if there is no activity? I have a socket connection to a server that for no reason we loose the connection and I sometimes we reconnect automaticaly and sometimes it does not reconnect for a long period of time (10 minutes or so). I appreciate any suggestions.
Have you run a network sniffer on the line to trace whats happening on the network? I would suspect a switch or router is dropping the connection (if everything runs just fine while under load). WinPcap works well and there are a number of UI interfaces for it.
Or add a simple I'm alive broadcast everyonce and a while, doent need to be a big message just something to keep the pipe open.
-- modified at 3:12 Wednesday 23rd August, 2006
I'd love to help, but unfortunatley I have prior commitments monitoring the length of my grass. :Andrew Bleakley:
|
|
|
|
|
void ObjectRoot::runUpdateHandlers(
ObjectRootPtr obj,
const RTI::AttributeHandleValuePairSet& theAttributes )
{
if (obj)
{
for (unsigned int i=0; i < ObjectRoot::ms_numUpdateHandlers; i++)
{
if (ObjectRoot::ms_updateHandlers[i])
{
(*ms_updateHandlers[i])(obj, theAttributes); }
}
}
}
I don't understand what the code highlighted in brown does.......
I am a beginner... please help me out
Thanks
|
|
|
|
|
ms_updateHandlers is a function pointer array, e.g. an array of pointers that point on functions.
(*ms_updateHandlers[i]) points on function number i in the array.
(obj, theAttributes) are the parameters of the function.
So (*ms_updateHandlers[i])(obj, theAttributes); is a function call of function number i in the ms_updateHandlers array, with parameters obj and the Attributes.
~RaGE();
I think words like 'destiny' are a way of trying to find order where none exists. - Christian Graus
|
|
|
|
|
Hey Rage,
thanks for the reply
What if you had a situation where you had two functions of the same parameters
(obj, theAttributes). How does the pointer know which function to point to?
Rage wrote: (*ms_updateHandlers[i]) points on function number i in the array.
I thought ms_updateHandlers is an array of pointers therefore i is a pointer number
Thanks
|
|
|
|
|