|
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.
|
|
|
|
|
You'd be much better off asking this question in the C++ Forum.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
Hi..... Budy
I have a project which was build under Visual basic.Net version 2005, this project was contained some report which were build under crystal report program for Visual studio .Net 2005 as well. I had created setup disk succesfull for my project, but when i try to install it to another computer I faced a problem that the crystal report could not running well.
actually when I made a setup disk I could not found the following files :
- crystal_managed2003.msm
- Crystal_Database_accessXXXXX.msm
- Crystal_ database_accessXXXX_enu.msm
- Crystal_regwizXXXX.msm
when I tried to add merge files, as I know those above files are really important when we want to make setup disk it's base on my experience when I used Visual studio.net ver 2003.
And Now I need your help to tell me how to get those above Crystal report support files in Visual studio Ver.2005 ?
Thank you
Best regards
ICE
|
|
|
|
|
Thanks for the suggest!!
|
|
|
|
|
My users want to add hotkey functions to FKeys. They want to use(with others) F6, CTRL+F6, SHIFT+F6 and CTRL+SHIFT+F6.
The CTRL+F6 and CTRL+SHIFT+F6 keys perform next/previous MDI window functions; is there any way for me to trap for CTRL+F6 and CTRL+SHIFT+F6 without also trapping CTRL+TAB and CTRL+SHIFT+TAB?
PeteB
I wouldn't say "he's not the sharpest knife",
I'd say "he's a spoon."
-- modified at 10:44 Wednesday 8th February, 2006
|
|
|
|
|
heres a similar example in VB.NET, dont know how similar it would be to VB6..
<br />
'KeyPreview property on main form must be set to True<br />
Private Sub MainForm_keyDown(ByVal sender As System.Object, ByVal key As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown<br />
'this sets the Handled value to true so that the system<br />
'makes no other attempt to handle ALT + F4 key presses<br />
If key.KeyData = Keys.Alt + Keys.F4 Then<br />
key.Handled = True<br />
End If<br />
End Sub<br />
|
|
|
|
|
This will work for most key combinations but CONTROL+F6 and CONTROL+SHIFT+F6 are translated into WM_SYSCOMMAND messages before they generate KeyDown events, so this function doesn't see them
PeteB
I wouldn't say "he's not the sharpest knife",
I'd say "he's a spoon."
|
|
|
|
|
PramsModNair on CodeGuru suggested using the RegisterHotKey API and that has worked perfectly.
PeteB
I wouldn't say "he's not the sharpest knife",
I'd say "he's a spoon."
|
|
|
|
|
Hi thereevery one i want to use the crystal reports in vb need somehelp hereamalso newto codeproj :->
|
|
|
|
|
Are you refering to Seagate Crystal Reports
|
|
|
|
|
No dear these are not crystal reports its version XI seagate are the version 9 one more thing i have already downloaded some sample projects using crystal reports but taht has a crystal32.ocx is missing althoug i have already installed crystal reports on my pc.tell me wht tot do?
|
|
|
|
|
I have a class library project.
How can I set one of the form is private?
I find no property in form can set this.
Thank you!
|
|
|
|
|
First, it's not a property. It's in the declaration of your Form's class:
Public Class Form1
Inherits System.Windows.Forms.Form
This is where you change the Public to Private. But (there's always one of these), you can't do it without making your Form a member of another class. Private types must be a member of another type.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
Thank you Dave Kreskowiak !
|
|
|
|
|
I use VB.NET to write a class library.
There is three classes for calling some functions,
and I have check the project property page,
Configuration Properties, Builds, Register for COM interop.
So, a .tbl file is generated when compile and build the project.
This file is for VBA to call this class library function.
I have tried to make reference to this .tbl file and call those function.
It works fine.
However, after I modify the class library and recompile the file,
the vba got an error.
But when I drop the item on refernece list and find out the .tbl for reference again,
The vba can run again.
How can I run the vba without reference again the .tbl?
Thanks!
|
|
|
|
|
(Assuming Visual Studio.NET 2003 here...) Part of your problem may be the fact that every time you compile your library your allowing the version umber to change. Open the library's AssemblyInfo.vb file. At the bottom, you'll see something like this:
<Assembly: AssemblyVersion("1.0.*")>
See the '*' in the version number? That's allowing the compiler to automatically increment the version number in your library.
When you reference a component, one of the things that is very important in the registration is the version. If you change the version of the component though, the reference is no longer valid, unless that version still exists.
Change that line in AssemblyInfo.vb to something like this:
<Assembly: AssemblyVersion("1.0.0.1")>
Change the version info by hand, if needed, during development. This will keep all builds of your component the same version number.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
Really Thank you to let me know this.
I have tried this but the same error is still here.
The error message said that the macro is stoped, please reference the help and find out the way to open the macro.
|
|
|
|
|
What error? Macro? What macro? You never said anything about a macro...
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
I am using Excel macro to reference the .tbl
The macro is really simple,
<br />
Sub a()<br />
Dim b As mydll.myclass<br />
Set b = New mydll.myclass<br />
<br />
b.myClassFunction<br />
End Sub<br />
b.myClassFunction runs fine when the first time,
after I modify and rebuild the mydll by VS2003,
the macro runs error.
b.myClassFunction just a msgbox("a") and I change to msgbox("b")
|
|
|
|
|
Curious...
When you created your component library, did you just enble the "Register for COM Interop" checkbox in your project properties?
Did you attribute your class with the ComClass attribute? Like this:
<ComClass(TestClass.ClassId, TestClass.InterfaceId, TestClass.EventsId)> _
Public Class TestClass
' These GUIDs provide the COM identity for this class
' and its COM interfaces. If you change them, existing
' clients will no longer be able to access the class.
Public Const ClassId As String = "38605A8E-9541-4E06-8E7E-6E07A4D67B8F"
Public Const InterfaceId As String = "22719D76-0322-4EC0-A100-95246F0F866E"
Public Const EventsId As String = "1AECF045-F034-4C92-9A62-83C56072E56C"
Public Sub New()
MyBase.New()
End Sub
Public Sub ShowMe()
MsgBox("This is the component!!!!!!")
End Sub
End Class
If not, this is probably why your component doesn't work every time you change something.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
Thank you first, I always see this ID in VS2003,
Does this ID generated by VS randomly?
Can I just copy this ID for my COM use?
Thank you again!
|
|
|
|
|
You COULD use it, but I would recommend you generate your own GUIDs.
Each class must have it's own unique GUID.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
You can learn more about this here[^].
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
I have try your advise.
There is a bit difference at all,
That is, When I using the class in VBA,
there is a list of public function in that class for me to choose.
This is no before adding the IDs.
However, The problem is still here.
Error after rebuild the COM.
Further information,
In my Class Library project, I have three classes and one window form.
In my test case in VBA, I have just using one class, and so I just adding the IDs to that class.
any other advise?
anyway, Thank you so much again!
|
|
|
|
|
cylix2000 wrote: Error after rebuild the COM.
And that would be???
cylix2000 wrote: In my Class Library project, I have three classes and one window form.
In my test case in VBA, I have just using one class, and so I just adding the IDs to that class.
any other advise?
You need to add different GUIDs to each class you want visible to COM. No two classes can have the same GUID.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|