|
|
hi there,
wanted a little help regarding using VB classes in C++ code.
i wrote a class definition in VB which needs to be extended in C++.
for which i wrote the class definition in VB as an ActiveX dll , which in turn resulted in a COM dll. i used the type definition of the dll to get the idl file, which i used with the MIDL tool to get the header and cpp file to be used in C++. i included the files in my c++project. and defined the interface pointer to the generated class definition using the CoCreateInstance method and used the pointer to call the methods defined in generated header file.
but sometimes the code works sometimes it doesnt. the code sometimes crashes and the error comes up as VB error code '91' .........
why does this happen ?? i think it is the versioning problem of the VB COM module. how do i avoid it ?? and ensure that my code always works???
what i really want is to somehow create a method which accepts class objects and also returns the same.
i had one more query abt how to write explicit constructors in VB?
i wanted to have 2 constructors in the VB class one which takes in parameters to initialize the private member variables, and the other which doesnt but somehow VB isnt able to distinguish between the methods and returns error. so i had to rename the methods differently.
is there any better method to acheive my requirement??
could anyone of you help me out ?????
thanx in advance!!!!!!
i am a software developer .
|
|
|
|
|
I am assuming you are talking about VB6 and native C++. If so, you are posting in the wrong area.
I believe error code 91 results from a VB object variable not actually "set" to an active object. If you update a COM object, you must unregister the old one and register the new version. Also, your C++ code must reference the new version also! However, I think you can keep the old version's GUID with your new version if you set it before compiling. I haven't programmed with VB since 1999 and my memory of it is failing.
-- modified at 19:07 Thursday 9th February, 2006
|
|
|
|
|
HI every1,
Im new To MC++ and Im using Visual Studio 2005 express. I was wondering if anyone can please tell me how begin a drawing methods on a image (eg Jpeg). there is alot of code out there in C++/C# etc but Im finding it hard to relate it to MC++. I would like some advise on how to DrawLine, DrawRect,DrawCircle etc on a image based on the mouse Event Handler (therefore no predefined set coordinates). The user can draw what ever they select. I know how to write the methods with set coordinates!
Can someone please supply a comment/advise/code ???
Thanks
Jonno
makaveli
|
|
|
|
|
Most likely, you want to use GDI+ for your graphics but you are not sure about how to translate example code in C# or VB. If you need help with C++/CLI programming, there is only one book currently available: Pro Visual C++/CLI and the .NET 2.0 Platform by Stephen R. G. Fraser, ISBN: 1-59059-640-4. This author also published a book for MC++ too: Managed C++ and .NET Development, ISBN (pbk): 1-59059-033-3. He has a chapter on how to create graphics using GDI+. Unfortunately, information on C++/CLI or MC++ is scattered and sparse as compared to C# and VB.
-- modified at 14:40 Thursday 9th February, 2006
|
|
|
|
|
Hi George,
Yeh thanks for ur advise. Ill need to get the book then , hopefully my unversity library has it. Im sure I can find some electronic copy out there on thee net for it.
I do need to use GDI+, its just MC++ thats gettin me the problems.
thanks for your comments
regards
Jonno
makaveli
|
|
|
|
|
I think you can get the e-book from Apress for about half the price of the paperback. You can also download the C++/CLI Language specification which is very helpful.
|
|
|
|
|
Yeh you can D/L the soucre code from the examples in the book. The Appress.com site like u mentioned. Ill gotta keep searchin throught the site, it seems pretty helpful.
cheers
makaveli
|
|
|
|
|
I just started moving to C++ a couple weeks ago, and have run into an issue I've not been able to Google an answer to.
From within VS, it seems I have to use .NET extensions to create a windows service, but some of the functionality I want to implement requires MFC (or, at least, the only way I've found to do it requires MFC).
Will the VS compiler allow me to use both .NET extensions and MFC ? And if so, are there steps I have to be able to use both ?
Thanks in advance for your help,
Mike the Red (a.k.a. The nooB) :->
|
|
|
|
|
You can mix MFC with Managed C++ or the new C++/CLI. However, since MFC is native code, you have to marshall any data exchanges with managed code. CString, for example, is very easy to use with managed code.
|
|
|
|
|
Hi all,
I need to check if an object created for a class is NULL or not....
How can this be done?
The code segment i had used is shown below:
public ref class Class1
{
private: static Class1 ^instance;
private: Class1();
public: static Class1^ Instance()
{
if(instance == NULL)
{
instance = gcnew Class1();
}
return instance;
}
};
This returns the following error:
error C2065: 'NULL' : undeclared identifier
Anyboby please help me out in this
Thanks in advance
Thanks and Regards
Madhu
-- modified at 4:49 Wednesday 8th February, 2006
|
|
|
|
|
Errrr
You mean this:
if (MyObject == NULL)<br />
{<br />
}
|
|
|
|
|
|
Use nullptr in lieu of NULL for managed objects.
|
|
|
|
|
Hello, I obtained the following code from MSDN under _pipe():
<code>
// crt_pipe.c
/* This program uses the _pipe function to pass streams of
* text to spawned processes.
*/
#include <stdlib.h>
#include <stdio.h>
#include <io.h>
#include <fcntl.h>
#include <process.h>
#include <math.h>
enum PIPES { READ, WRITE }; /* Constants 0 and 1 for READ and WRITE */
#define NUMPROBLEM 2
int main( int argc, char *argv[] )
{
int fdpipe[2];
char hstr[20];
int pid, problem, c;
int termstat;
/* If no arguments, this is the spawning process */
if( argc == 1 )
{
setvbuf( stdout, NULL, _IONBF, 0 );
/* Open a set of pipes */
if( _pipe( fdpipe, 256, O_BINARY ) == -1 )
exit( 1 );
/* Convert pipe read descriptor to string and pass as argument
* to spawned program. Program spawns itself (argv[0]).
*/
itoa( fdpipe[READ], hstr, 10 );
if( ( pid = spawnl( P_NOWAIT, argv[0], argv[0], hstr, NULL ) ) == -1 )
printf( "Spawn failed" );
/* Put problem in write pipe. Since spawned program is
* running simultaneously, first solutions may be done
* before last problem is given.
*/
for( problem = 1000; problem <= NUMPROBLEM * 1000; problem += 1000)
{
printf( "Son, what is the square root of %d?\n", problem );
write( fdpipe[WRITE], (char *)&problem, sizeof( int ) );
}
/* Wait until spawned program is done processing. */
_cwait( &termstat, pid, WAIT_CHILD );
if( termstat & 0x0 )
printf( "Child failed\n" );
close( fdpipe[READ] );
close( fdpipe[WRITE] );
}
/* If there is an argument, this must be the spawned process. */
else
{
std::cout << "\nGOT HERE\n" << std::endl;
/* Convert passed string descriptor to integer descriptor. */
fdpipe[READ] = atoi( argv[1] );
/* Read problem from pipe and calculate solution. */
for( c = 0; c < NUMPROBLEM; c++ )
{
read( fdpipe[READ], (char *)&problem, sizeof( int ) );
printf( "Dad, the square root of %d is %3.2f.\n", problem, sqrt( ( double )problem ) );
}
}
}
</code>
The problem is, the code will display the parent message and then the program stops. I also know that the child process will jump in while the parent process is inside the for loop (I did a simple printf("GOT HERE") inside of the child process). Is there something wrong with this code, or something I am missing??
Mike - I love to program!
-- modified at 23:26 Tuesday 7th February, 2006
|
|
|
|
|
Where do you open and close the pipes in the spawned process?
|
|
|
|
|
Good morning, fellow homo sapiens sapiens and other species
I am a novice c++ programmer who mainly does it for fun.
I am currently working on a small program which displays messages after a certain amount of time
and for a certain amount of time. It's purpose is primarily helping me study and maybe it might
one day function as an alert-messenger.
I basically does this: the user selects the messages that need to be displayed and sets the timer and
the delay between messages. Then the program randomly selects a message and displays that message
for the pre-defined amount of time after which it makes the message disappear and waits for a second
pre-defined amount of time to display the second message.
The problem is that I want it displayed not in the window with the DOS prompt executing my file, but
on the screen. Like those subliminal messaging programs do. How can i now make the string (message) appear on the screen (how do I output it to the screen, not the DOS prompt)? And how do I make it disappear after
the pre-defined amount of time?
One last thing is this question: can I determine the coordinates of this string with gotoxy(x,y)?
If not, how do I do this then?
A well-meaned thanks in advance,
Peter
P.S. My compiler is the Borland C++ 5.5 compiler, in case it's vital to know this. The .exe files are executed in a DOS prompt.
A program is to be written primarily for humans to read, and only secondarily for computers to be able to execute.
|
|
|
|
|
Hi guys, i've an execution error when i use a dll from VB in c++. I've debugged the code and i've seen that the problem is when a callback function is returning...the point is that this callback function only drop down when is called from one of the dll's functions, but is working succesfully with the rest of them.
The functions of de dll are defined like this:
typedef void __stdcall (*funcion_crear)(char*,int,char*);
typedef void __stdcall (*funcion_configurar)(int,int,int,int,int);
typedef void __stdcall (*funcion_cargar)(char*);
typedef void __stdcall (*funcion_guardar)(char*);
typedef int __stdcall (*funcion_entrenar)(char*,char*);
typedef void __stdcall (*funcion_evaluar)(char*);
typedef void __stdcall (*CallVBFunctionStringPtr)(int);
typedef void __stdcall (*CallVBFunctionReportPerformancePtr)(int);
typedef void __stdcall (*CallVBFunctionClassificationResultPtr)(int);
funcion_crear fcrear;
funcion_configurar fconfig;
funcion_entrenar fentrenar;
funcion_evaluar fevaluar;
funcion_guardar fguardar;
funcion_cargar fcargar;
CallVBFunctionStringPtr callstring;
CallVBFunctionReportPerformancePtr callperformance;
CallVBFunctionClassificationResultPtr callresult;
Then, the external callback functions (CallVBxxx) are implemented with this three functions:
void __stdcall fCString (char* cadena,int longitud)
{
}
void __stdcall fCReportPerformance (char* cadenaestado,int longitud,int estado)
{
}
void __stdcall fCResult (int indice_clase)
{
Form1->resultado_RNA=indice_clase;
}
and the funcions are loaded from the main form like this:
fconfig=(funcion_configurar)(GetProcAddress(libreria,"ConfigureParameters"));
fcrear=(funcion_crear)(GetProcAddress(libreria,"create_net"));
fentrenar=(funcion_entrenar)(GetProcAddress(libreria,"train_net"));
fevaluar=(funcion_evaluar)(GetProcAddress(libreria,"test_net_singlevector"));
fguardar=(funcion_guardar)(GetProcAddress(libreria,"save_net"));
fcargar=(funcion_cargar)(GetProcAddress(libreria,"load_net"));
callstring=(CallVBFunctionStringPtr)(GetProcAddress(libreria,"CallVBFunctionStringPtr"));
callperformance=(CallVBFunctionReportPerformancePtr)(GetProcAddress(libreria,"CallVBFunctionReportPerformancePtr"));
callresult=(CallVBFunctionClassificationResultPtr)(GetProcAddress(libreria,"CallVBFunctionClassificationResultPtr"));
if ((callstring==NULL) || (callperformance==NULL) || (callresult==NULL)) ShowMessage("cagada");
callstring(int(&(fCString)));
callperformance(int(&(fCReportPerformance)));
callresult(int(&(fCResult)));
The only function that is dropping down is fevaluar, and the problem is when fCString callfuction is returning...
Can Somebody help me????
thank you very much
Best Regards.
|
|
|
|
|
hi all,
To strip off circular dependency between a C# proj and a C++ proj, I need to define an interface in C++ proj. and implement it with C#. The code is like this:
//in C++ proj.
using namespace A
__gc __interface IA
{
void display();
}
//in C# proj.
public class B : A.IA
{
void display(){}
}
the error message is like this: COM Interop registration failed. Could not find a type library for assembly "A.IA" ...
3q for help!
Dilly
Dilly
|
|
|
|
|
Your Managed C++ interface must be compiled into an assembly (Code Library). Your C# code must reference the compiled assembly to have proper access to the Managed C++ interface.
|
|
|
|
|
3q for help, but I don't know exactly how to compile the managed interface into an assembly (Code Libray) with VS.NET 2003. Could you plz say something more clearly? Thank you!
Dilly
|
|
|
|
|
I create a class library with .net, and I can subclass CA from the library, but still can not implement the interface IA in it. The error is the same:
-----------------------------------------------
COM Interop registration failed. Could not find a type library for assembly 'CodeLibrary'.
Dilly
|
|
|
|
|
If you are using .NET 2.0 Framework, create a new C++/CLI project choosing the project type of "CLR" and the template "Class Library". The wizard will create an empty class in the header file (ending in ".h"). Modify the empty class to be your interface and compile. This process will create an assembly (ending in .dll) that you can use to reference in your C# code.
|
|
|
|
|
#define R(l,r,i) do { l ^= p[i]; r ^= F(l); } while(0)
why a while(0) ?
|
|
|
|
|
|