|
From experience, I can tell you that it will if you ever apply to Amazon.com. Just an FYI.
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,
This brought some clarity on function pointer to me and i think this is a better of doing it. I hope this method is supported in most all compilers.
typedef int FunctPtr(int,int);
....
main
{
FunctPtr *fp = somefunction; //This declaration is clearer that fp variable is a pointer.
fp(...);
}
typedef int (*FuctPtr1)(int, int); //sometimes looks confusing as what is happening.
and
FuctPtr1 c = somefunc;
-- modified at 4:03 Thursday 17th August, 2006
-- modified at 4:04 Thursday 17th August, 2006
-Prakash
|
|
|
|
|
Zac Howland wrote: This syntax is creating a function pointer
Won't it be typedef void UpdateHandlerPtr (ObjectRootPtr, const RTI::AttributeHandleValuePairSet&);
or typedef void (UpdateHandler*) (ObjectRootPtr,const RTI::AttributeHandleValuePairSet&);
|
|
|
|
|
typedef void UpdateHandler(ObjectRootPtr, const RTI::AttributeHandleValuePairSet&);
is syntaxically equivalent to writing
typedef void (*UpdateHandlerPtr)(ObjectRootPtr, const RTI::AttributeHandleValuePairSet&);
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
|
|
|
|
|
I Suggest you read the Book by Brian W. Kernighan & Dennis M. Ricthie: the C Programming Language This book is Much maligned, but actually very good! It spells out the Syntax and methods of the C Language, without going into the legalities, like the ANSI standard does! On page 122 of my copy it gives paragraph 5.12- Complicated Declarations. It explains there in lucid details how to read your declaration, and gives the code for a simple program which takes a declaration, and translates it back into 'english'
Success
LateNightsInNewry
|
|
|
|
|
Hello guys,
I am quite new to mfc and it seems there are tons of questions about it and little that I can get out of the documentation provided by microsoft, so hope someone with more exp can answer it for me.
Right now, I have several dialog bar in my app, all have been set according to how I want it to be, except, one thing that confuse me, when I drag one bar, I can't seem to reflect the mouse position onto the other bars, how do I obtain the mouse position while still dragging a dialog bar, from another dialog bar. thx...
LE
|
|
|
|
|
How about using GetCursorPos() which fills out a POINT structure
|
|
|
|
|
I did tried with GetCursorPos(), but fails and it seems that this would be the case,
When a user drag the dialog bar around, the mouse is captured by this bar, so any attempt to have the mouse sent any information to another dialog bar would be impossible.
I have written functions overriding those MouseDown, MouseUp, etc, to call GetCursorPos() but it still fail. Once the mouse is clicked and drag on a bar, these functions will not be called.
I wanted to detect the mouse, while it is dragging a bar, when it enters/over another bar...so the first bar would be dragged around, and the second bar will be the one doing the detection.
|
|
|
|
|
could you derive a class from the dialog bar (since it has the mouse cpatured) and in the MouseMove of the derived class pass the position eith up to the parent and the parent can pass it on to the other dialog bar or directly to the other dialog bar?
cje
|
|
|
|
|
hi again guys,
I have derive my bar class directly from dialogbar, called it dialogcontrol.
Shown here....portion of
//////////////////////////////////////////////////////////////////////////////
class CDialogControl;
typedef CTypedPtrArray <cptrarray, cdialogcontrol*=""> barArray;
class CDialogControl : public CDialogBar
{
// Construction
public:
void DrawWindowText(CString p);
bool AutoResize();
CSize vert ,horz;
virtual CSize CalcFixedLayout(BOOL bStretch, BOOL bHorz);
virtual CSize CalcDynamicLayout(int nLength, DWORD dwMode);
CDialogControl(); // standard constructor
// m_dialogBarArray theBar;
// Dialog Data
//{{AFX_DATA(CDialogControl)
enum { IDD = IDD_ControlDialog };
CStatic m_Text;
//}}AFX_DATA
//////////////////////////////////////////////////////////////////////////////////////
Also, for the .cpp, I overide those mouse events as normally done...
//----------------------------------------------------------------------------------------
void CDialogControl::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CDialogBar::OnLButtonDown(nFlags, point);
}
void CDialogControl::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CDialogBar::OnMouseMove(nFlags, point);
}
void CDialogControl::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CDialogBar::OnLButtonUp(nFlags, point);
}
//-------------------------------------------------------------------------------------
I tried the method you have mentioned, by "obtaining the mouse position while moving and pass it to the parent", trouble is, when the dialog bar is dragged, the mousemove event do not respond, so whatever operation I put in the OnMouseMove method (same thing for the LButton), it dont compute.
I have found out in some article, it says when the dialogbar is dragged around, the mouse is captured by a CDockContext class and mouse messages such as WM_MOVE, CLICK, etc, is process there, not in the bar itself, so I guess the question I got now is, how do the rest of my dialog bar listens to the mouse events through this cdockcontext...the article do not go on this detail I needed...hopes someone would tell me how. thx for the effort guys, appreciate it alot..
Lucky
|
|
|
|
|
When you derive a class, you do not re-declare the base functionality! That's already in the original class. By re-declaring you override! Strip the guts out of your header, and you stand a better chance!
LateNightsInNewry
|
|
|
|
|
when you say "re-declare the base functionality", did you mean the calcfixed and calcdynamic?
can you explain a bit more..thx
|
|
|
|
|
See GetMessagePos and
GetCursorPos<c doe=""> <br />
<br />
<div class="ForumSig"><font size="2" color="#99ff66"><hr></font><div style="padding: 2px; text-align: left; color: rgba(255, 255, 255, 1); width: 80px"><font size="2" color="#99ff66">WhiteSky<br />
</font></div><hr></div>
|
|
|
|
|
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
|
|
|
|
|