|
Except this, use of windows api's on other languages is difficult c++.
|
|
|
|
|
savitri wrote: I am doing one VC++ Program in that i want to insert VB Dll
The first good question maybe: why do I need such a thing?
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
Hii
Thanks for replying..I am having one DLL in VB for my project Concern.
But i dont how to import DLL's in VC++.When i am doing like that what i mentioned in last message it is not possible to get functions from dll.
So please will you tell me how can i get the functions from the VB dll to vc program.
Please help me out I am trying from two days but i am not getting solution please tell me..I am using loadlibrary and getprocaddress like this:
typedef BOOL (WINAPI* ptr_func1)(BSTR* bstr,BSTR* bstr1,BSTR* bstr2,BSTR* bstr3,BSTR* bstr4);
ptr_func1 ProcessingInformation = NULL;
HINSTANCE hLib;
hLib = LoadLibrary(_T("C:\\Program Files\\Microsoft Visual Studio\\My Projects\\BoolDate\\SampleDll.dll"));
if (hLib == NULL)
{
MessageBox(_T("Unable to load .dll"), NULL, MB_ICONERROR);
}
else
{
ProcessingInformation = (ptr_func1)GetProcAddress(hLib,
_T("ProcessingInformation"));
CString str;
BSTR server,usr,pwd,Temp,Temp3;
BOOL bstr;
Temp=SysAllocString(L"21\8\2008");
str=Temp;
MessageBox(str);
Temp3=SysAllocString(L"21\7\2008");
str=Temp3;
MessageBox(str);
server=SysAllocString(L"savitri");
str=server;
MessageBox(str);
usr=SysAllocString(L"root");
str=usr;
MessageBox(str);
pwd=SysAllocString(L"base");
str=pwd;
MessageBox(str);
/* The actual call to the function contained in the dll */
bstr = ProcessingInformation(&Temp,&Temp3,&server,&usr,&pwd);
MessageBox("Gettting BSTR Value");
str.Format("%d",bstr);
MessageBox(str);
SysFreeString(Temp);
SysFreeString(Temp3);
SysFreeString(server);
SysFreeString(usr);
SysFreeString(pwd);
/* Release the Dll */
FreeLibrary(hLib);
}
Please tell me what is wrong with this code.Now i am not getting any errors in compiling time but in run time i am one error message box like send error and don't send..
Please Help me.I need your help very much.
Thanks In Advance,
Savitri
|
|
|
|
|
Does the DLL load successfully?
Also did you check that functions that you are calling are exported from the DLL
BTW on which line do you encounter the crash
Somethings seem HARD to do, until we know how to do them.
_AnShUmAn_
|
|
|
|
|
Hii
Ya it is loading dll properly because it is not giving error..i am checking conditions also.I send that part of code in last message please tell me what is wrong with my code.I am getting tension.
Please give me some suggetions.please help me out.
Thanks IN ADVANCE,
Savitri
|
|
|
|
|
Hi I just checked by creating ActiveXDLL project in VB.
I don't think you can use it using LoadLibrary().
You have to use
#import "YourDll.dll" no_namespace
Sample Code:
CoInitialize(NULL);
_Class1Ptr class1;
class1.CreateInstance(__uuidof(Class1));
short i=10,k=20;
int ans = class1->add(&i,&k);
class1.Release();
CoUninitialize();
It works properly.
I hope it helps
Regards,
Sandip.
modified on Friday, August 22, 2008 8:11 AM
|
|
|
|
|
Hi Sandip,
I used like this but i am getting errors..I am writting like this:
::CoInitialize(NULL);
//note this change after taking out the no_namespace macro
//if there is no namespace then also the progid has to be __uuidof(VbDll::CVbDll) like this
SampleDll::_FunctionClass sample;
HRESULT hr=sample.CreateInstance(__uuidof(SampleDll::_FunctionClass)); //here the progid is VbDll::CVbDll)
//not just CVbDll
//sample.AddRef();
BSTR server,usr,pwd,Temp,Temp3;
BOOL bstr;
Temp=SysAllocString(L"21\8\2008");
str=Temp;
MessageBox(str);
Temp3=SysAllocString(L"21\7\2008");
str=Temp3;
MessageBox(str);
server=SysAllocString(L"savitri");
str=server;
MessageBox(str);
usr=SysAllocString(L"root");
str=usr;
MessageBox(str);
pwd=SysAllocString(L"base");
str=pwd;
MessageBox(str);
BOOL bstrMyString;//=TRUE;
//check for the instance
bstrMyString=sample.ProcessingInformation(&Temp,&Temp3,&server,&usr,&pwd);
str.Format("%d\n", bstrMyString);
MessageBox(str, "MyString aus VB", MB_OK);
sample.Release();
::CoUninitialize();
It is giving errors...
1. C:\Program Files\Microsoft Visual Studio\My Projects\UseVbDll\UseVbDllDlg.cpp(194) : error C2259: '_FunctionClass' : cannot instantiate abstract class due to following members: c:\program files\microsoft visual studio\my projects\usevbdll\debug\sampledll.tlh(34) : see declaration of '_FunctionClass'
2.C:\Program Files\Microsoft Visual Studio\My Projects\UseVbDll\UseVbDllDlg.cpp(194) : error C2259: '_FunctionClass' : cannot instantiate abstract class due to following members:
c:\program files\microsoft visual studio\my projects\usevbdll\debug\sampledll.tlh(34) : see declaration of '_FunctionClass'
3.C:\Program Files\Microsoft Visual Studio\My Projects\UseVbDll\UseVbDllDlg.cpp(195) : error C2039: 'CreateInstance' : is not a member of '_FunctionClass'
c:\program files\microsoft visual studio\my projects\usevbdll\debug\sampledll.tlh(34) : see declaration of '_FunctionClass'
My Dll is like this
// c:\program files\microsoft visual studio\my projects\usevbdll\debug\SampleDll.tlh
//
// C++ source equivalent of Win32 type library C:\Program Files\Microsoft Visual Studio\My Projects\BoolDate\SampleDll.dll
// compiler-generated file created 08/22/08 at 17:31:22 - DO NOT EDIT!
#pragma once
#pragma pack(push, 8)
#include <comdef.h>
namespace SampleDll {
struct __declspec(uuid("a3105692-d6d7-41e0-8d8c-f4ab326fa2f4"))
/* dual interface */ _FunctionClass;
struct /* coclass */ FunctionClass;
_COM_SMARTPTR_TYPEDEF(_FunctionClass, __uuidof(_FunctionClass));
// Type library items
struct __declspec(uuid("a3105692-d6d7-41e0-8d8c-f4ab326fa2f4"))
_FunctionClass : IDispatch
{
//
// Wrapper methods for error-handling
//
VARIANT_BOOL ProcessingInformation (
BSTR * Date1,
BSTR * Date2,
BSTR * ServerName,
BSTR * Username,
BSTR * Password );
//
// Raw methods provided by interface
//
virtual HRESULT __stdcall raw_ProcessingInformation (
BSTR * Date1,
BSTR * Date2,
BSTR * ServerName,
BSTR * Username,
BSTR * Password,
VARIANT_BOOL * _arg6 ) = 0;
};
struct __declspec(uuid("650d301c-f7cf-42b5-9075-7faf8bff40ce"))
FunctionClass;
// [ default ] interface _FunctionClass
#include "c:\program files\microsoft visual studio\my projects\usevbdll\debug\SampleDll.tli"
} // namespace SampleDll
#pragma pack(pop)
Help me out.
Thanks,
Savitri
|
|
|
|
|
savitri wrote: HRESULT hr=sample.CreateInstance(__uuidof(SampleDll::_FunctionClass)); //here the progid is VbDll::CVbDll)
Dont pass _FunctinClass
use SampleDll::FunctionClass.
Also You are using
SampleDll::_FunctionClass sample;
Here you need use
SampleDll::_FunctionClassPtr sample;
Just check my post again.
BTW
Use Code block button below posting area for code blocks it is very difficult to read your code otherwise.
Regards,
Sandip.
modified on Friday, August 22, 2008 8:17 AM
|
|
|
|
|
Hii
I did as u told but no change in it..i am fed of this dll..
thanks for response,
savitri
|
|
|
|
|
I don't know it should work
All the best
Regards,
Sandip.
|
|
|
|
|
Did you try to debug? At what line the error occurs? Do you have the source of the VB DLL ?
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
Hii
I am getting error when the cursor is on the function called..ya i am having vb Dll code of 5 line..it is test dll..so i am testing whether vb dll can i insert properly or not in vc program.please tell me how come out from this problem.
Please give me some suggetions.please help me out.
Thanks IN ADVANCE,
Savitri
|
|
|
|
|
Could you please post your VB DLL code?
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
Hii,
My VB Code:
Public Function ProcessingInformation(Date1 As String, Date2 As String, ServerName As String, Username As String, Password As String) As Boolean
If Date1 <> "" Then
ProcessingInformation = True
Else
ProcessingInformation = False
End If
End Function
this is dll called SampleDll and module FunctionClass
please tell me how to use this dll in VC++..please this is very fewer for me.
Thanks in advance,
Savitri
|
|
|
|
|
I dont know much about VB
But i think the function you exporting should be defined in Class Module. are you doing that.
You can open your dll in "Dependency walker" and check if you can see your function there.
Regards,
Sandip.
|
|
|
|
|
savitri wrote: but in run time i am one error message box like send error and don't send..
This error means your application is crashing..
did you verify that you are getting proper value for
savitri wrote: ProcessingInformation = (ptr_func1)GetProcAddress(hLib,
Regards,
Sandip.
|
|
|
|
|
Hii Sandip,
Ya when returning value from dll it is in -VE so it is giving error.
I am not getting what is wrong with my program. please tell me.
My code is like this:
typedef BOOL (WINAPI* ptr_func1)(BSTR* bstr,BSTR* bstr1,BSTR* bstr2,BSTR* bstr3,BSTR* bstr4);
ptr_func1 ProcessingInformation = NULL;
HINSTANCE hLib;
hLib = LoadLibrary(_T("C:\\Program Files\\Microsoft Visual Studio\\My Projects\\BoolDate\\SampleDll.dll"));
if (hLib == NULL)
{
MessageBox(_T("Unable to load .dll"), NULL, MB_ICONERROR);
}
else
{
ProcessingInformation = (ptr_func1)GetProcAddress(hLib,
_T("ProcessingInformation"));
CString str;
BSTR server,usr,pwd,Temp,Temp3;
BOOL bstr;
Temp=SysAllocString(L"21\8\2008");
str=Temp;
MessageBox(str);
Temp3=SysAllocString(L"21\7\2008");
str=Temp3;
MessageBox(str);
server=SysAllocString(L"savitri");
str=server;
MessageBox(str);
usr=SysAllocString(L"root");
str=usr;
MessageBox(str);
pwd=SysAllocString(L"base");
str=pwd;
MessageBox(str);
//bstr=TRUE;
/*bstr=m_UserControl1.Processattendacne(&Temp,&Temp3,&server,&usr,&pwd);
str.Format("%d",bstr);
MessageBox(str);*/
m_Edit1="savitri";
m_Edit2="Base";
MessageBox("Gettting Value");
/* The actual call to the function contained in the dll */
bstr = ProcessingInformation(&Temp,&Temp3,&server,&usr,&pwd);
MessageBox("Gettting BSTR Value");
str.Format("%d",bstr);
MessageBox(str);
SysFreeString(Temp);
SysFreeString(Temp3);
SysFreeString(server);
SysFreeString(usr);
SysFreeString(pwd);
/* Release the Dll */
FreeLibrary(hLib);
please help me out.
Thanks in advance,
Savitri
|
|
|
|
|
Did you check my post above Import[^]
I think you cant use LoadLibrary().
I have given sample code in post above.
Regards,
Sandip.
|
|
|
|
|
Hii..
I am doing as you told me in previous post.please check your mail once or check my reply to your post import.please tell me
thanks,
savitri
|
|
|
|
|
Please follow the same thread above.
I have replied to you pointing out the errors.
Please check.
Regards,
Sandip.
|
|
|
|
|
Hi!
I've to add more than one project to a solution. How to set the start up project?
|
|
|
|
|
T.RATHA KRISHNAN wrote: I've to add more than one project to a solution. How to set the start up project?
Right click a project and select "Set as startup project".
Nibu babu thomas
Microsoft MVP for VC++
Code must be written to be read, not by the compiler, but by another human being.
Programming Blog: http://nibuthomas.wordpress.com
|
|
|
|
|
Thanks for ur reply. My first project contains a GUI application and the second project contains another application. I've set the GUI project as startup Project and I want to run the second application if click the Start Button in the GUI(first Project).
|
|
|
|
|
T.RATHA KRISHNAN wrote: I want to run the second application if click the Start Button in the GUI(first Project).
Use ShellExecute or CreateProcess
Somethings seem HARD to do, until we know how to do them.
_AnShUmAn_
|
|
|
|
|
I think you are posting similar questions again and again.
Question:
Running another executable within GUI of some other executable.
I guess you have got answers that this cant be done in previous post.
Adding multiple projects in one solution is just for convenience, Still they will be different application even though they are in same solution.
If you want the second application as part of your first application. Merge the second application source with first application. Again Adding projects to same solution is not merging. You have to add source files of second application to first.
Is it clear or still you have any doubts??
Regards,
Sandip.
|
|
|
|
|