How to call MFC Dll Dialog
Hi,
I have created a MFC regular dialog as a dll(TestDialog). And exposed the entire class. Did not expose any specific member function.
Then i created one more MFC dialog based exe and trying to call my dll.
I did the below settings:
Input: TestDialog.lib
Include : header file
Now i am calling as
CTestDialog dlg;
m_pMainWnd = &dlg;
dlg.DoModal().
I am not getting any dialog.
Can anyone please help me on this.
Thanks
sorry it maybe because of zip file.
i will write a step.
just simple.
i use win32 dll with mfc support with exported some symbol. name DialogInDll
create dialog and create class for it. TestDlg
you will see like this DialogInDll
// This class is exported from the DialogInDll.dll
class DIALOGINDLL_API CDialogInDll {
public:
CDialogInDll(void);
~CDialogInDll();
// TODO: add your methods here.
void showdlg(); // function for the show dialog.
extern DIALOGINDLL_API int nDialogInDll;
DIALOGINDLL_API int fnDialogInDll(void);
//--------------TestDlg .h----------------------------------
#pragma once
#include "resource.h"
// TestDlg dialog
class TestDlg : public CDialogEx
DECLARE_DYNAMIC(TestDlg)
public:
TestDlg(CWnd* pParent = NULL); // standard constructor
virtual ~TestDlg();
// Dialog Data
enum { IDD = IDD_TESTDLG };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
DECLARE_MESSAGE_MAP()
//-----------------------------DialogInDll.cpp-------------------------------
// add this code
void CDialogInDll::showdlg ()
AFX_MANAGE_STATE(AfxGetStaticModuleState( )); // this is very important
TestDlg dlg;
dlg.DoModal();
CDialogInDll::CDialogInDll(void)
CDialogInDll::~CDialogInDll()
///compile.....
//===================================
// from exe make function.
// include DialogInDll.h/ copy lib file to source folder / add DialogInDll.lib to linker in project property.
void test ()
CDialogInDll cd;
cd.showdlg ();
cd.la.name = "Test";
CString str(CString(cd.la.name.c_str()));
AfxMessageBox (str);
Similar Messages
-
How to call the DLL writing in Vb6.0 from testsatnd?
Hi,
I want to call a dll writting in VB6.0 from teststand. But as i see from the "Step Setting" in teststand, only the C/C++ Dll can be selected in the "adapter" type. I try to use this one as my adapter to call my VB6.0 dll, in result, there is no function can be seen in the "function" tab in teststand.Anyone know how to call the DLL writing in Vb6.0?
Solved!
Go to Solution.Hi Ivan,
Just to be sure that your DLL is not wrong
you have check if all functions are well and present.
There is tool called "Dependency Walker" You can download it at http://dependencywalker.com/ .
With it you can look "inside" your dll
If you will see your functions there, you will see them (in my case !!always!!) in TestStand, too.
Hope this helps
Greetings
Juergen
=s=i=g=n=a=t=u=r=e= Click on the Star and see what happens :-) =s=i=g=n=a=t=u=r=e= -
How to call LabVIEW dll from ATL COM dll
I have tried to call simple LabVIEW 8.6 Dll from win32 test application, class Library.
I have include LabVIEW generated SharedLib.h file and SharedLib.lib file in the test application which I created as simple win32 console project and also from win32 class Library. I was sucessfully able to call my LabVIEW dll funtion.
But when I create ATL COM project and try to add SharedLib.h file and SharedLib.lib file I used to get following erors
Error 1 error C2733: second C linkage of overloaded function 'StrCatW' not allowed d:\program files\national instruments\labview 8.6\cintools\extcode.h 463
Error 2 error C2733: second C linkage of overloaded function 'StrCpyW' not allowed d:\program files\national instruments\labview 8.6\cintools\extcode.h 464
Error 3 error C2733: second C linkage of overloaded function 'StrCpyNW' not allowed d:\program files\national instruments\labview 8.6\cintools\extcode.h 465
Error 4 error C2733: second C linkage of overloaded function 'StrCmpW' not allowed d:\program files\national instruments\labview 8.6\cintools\extcode.h 466
Error 5 error C2733: second C linkage of overloaded function 'StrCmpNW' not allowed d:\program files\national instruments\labview 8.6\cintools\extcode.h 467
these many errors.
Will some one explain me how to call LabVIEW dll from ATL COM dll.
Thanks & Regards,
JayI also had this problem. My application is unicode-aware, but I was attempting to link it to a library with primitive C-string arguments. You could dynamically load the DLL as suggested (more work), modify the header files (really not recommended), or if you are feeling lucky you could try fooling the compiler, as I was successfully able to do in Visual Studio 2010, by steering the preprocessor around those functions (assuming you're not using them, of course -- otherwise this probably wouldn't work):
// prepare for NI extcode.h inclusion. avoid linker errors for this project.
#define StrCatW(a,b) IgnoreLinkError_StrCatW(a,b);
#define StrCpyW(a,b) IgnoreLinkError_StrCpyW(a,b);
#define StrCpyNW(a,b,c) IgnoreLinkError_StrCpyNW(a,b,c);
#define StrCmpW(a,b) IgnoreLinkError_StrCmpW(a,b);
#define StrCmpNW(a,b,c) IgnoreLinkError_StrCmpNW(a,b,c);
// header file for my LabView-built DLL (ASCII single-byte character arguments)
#include <MyLibraryHeader.h>
// clean up afterwards, put things back to 'normal'
#undef StrCatW
#undef StrCpyW
#undef StrCpyNW
#undef StrCmpW
#undef StrCmpNW -
How to call a dll which has one VISA name as input
Hi there,
The Labview application builder can generate a dll file from a vi which is a simple serial comunication program using VISA name as one control.
The problem is how to call the dll file in Labview which has a VISA name as INPUT?
Thanks!
GeorgeI would suggest modifying the LabVIEW VI so that the input is a string control instead of a visa control. The LabVIEW application will work the same and there is no need for any casting. All visa VIs can take a string as an input. Then when you recreate the dll make the input a string. Then you can easily pass a string to the dll from any API.
-Josh -
How To Call Save As Dialog?
Dear All,
I have OAS Forms And Report Services10g(9.0.4) on Window 2000 & service pack 4 And 10g Developer Suit.
To deploy application on web..
How can I call "Save As Dialog" to save a file on the user's machine through When_Buton_Pressed trigger. The file was generated by the database.
Any help will be nice.
ThanksThanks for code
but when i place on when button trigger it gives this error dialog
Oracle.forms.webutil.file.FileFunctions bean not found.
WEBUTIL_FILE.FILE_SELECTION_DIALOG_INT will not work.
the code was
Declare
LC$Target Varchar2(256) := 'text.txt' ; -- file name
LC$Fic Varchar2(256) ;
Begin
LC$Fic := WEBUTIL_FILE.FILE_SAVE_DIALOG
'D:\',
LC$Target,
'Sélectionner un fichier'
If LC$Fic is null Then
Return ; --// end user has pressed cancel
End if ;
End;
help needed & Please tell me How can i verify that mine installation & configuration of webtill is correct.
Thanks
Rana Adnan -
How to call Fortran .dll file that using other library files?
Hi,
I am trying to do some arkward tasks using LabView, and I am desperately need help....
A little bit background:
1. My co-worker has some code written in Fortran, where he called other libraries (many from CERNLAB or PAW). Those stuffs are pretty powerful in mathmatical calculation and simulations.
2. In some of my LabView code, I need to call his Fortran source code in order to do some complicated calculations. I have no capablility to translate his Fortran code to Labview (or is it even possible??), so we end up with trying to use "Call library function node" where I just provide input/outputs to communicate with his code. The idea sounds simple enough?
3. We complie the Fortran code into .dll, and then specifiy the dll in "Call library function node". The first try with a very simple Fortran code, something like c = a+b*a, was sucessful. The dll file and Call lib function worked good. It's sort of proved the concept.
4. Now I am trying more complicated Fortran code (say Test.dll), which calling other library (.lib files) that using typical "call xxx(a,b,c)" line, and my nightmare started.... It seems nothing was excuted when I call Test.dll in LabView.
Questions:
1. How do LabView know if the Test.dll code needs functions from other .lib files? Do I need to copy all the .lib files to a specific folder?
2. When I create .dll file, for LabView to be able to use it, are there any special requirement on the way the .dll is compiled?
3. Seems there is mismatch btw the data type in Fortran and LabView. For example, LabView's Signed 8-bit Integer seems different with a integer in Fortran. How can i know the correlation btw data type in different langurage, i.e. LabView vs Fortran?
4. Are there any good examples that I can take a look?
I would highly appreicate any suggestions/helps!
Rgds,
HarryYou are aware that Intel Visual Fortran is the successor to Compaq Visual Fortran (I think you made a mistype with the Virtual)? So an upgrade might be at its place.
Anyhow I'm really not familiar with Fortran at all, but lib files are usually compiled into an EXE or DLL and not loaded dynamically. 1)
So there should be no problem with locating those libs. What most likely is a problem are other DLL dependencies such as any Fortran Runtime library or possibly other third party DLLs the more advanced code in your DLL might be using.
Typically most compilers can be configured to link the runtime library code statically into the DLL, as altenbach reports for the Intel compiler, otherwise you must make sure to install the redistributable Fortran Runtime Library for your compiler. Besides that you must make sure to find out what other runtime dependencies your code might have and install them.
1) One exception I know of is LabWindows CVI which allows to also load lib files dynamically. This is supposedly a legacy feature from LabWindows for DOS, which allowed that feature to simulate dynamic module loading in order to swap modules at runtime to work around the 640k memory limitation of DOS.
Rolf Kalbermatter
CIT Engineering Netherlands
a division of Test & Measurement Solutions -
How to call Labview DLL from VB2005
Dear all expert,
I'm a student and very new in Labview programming.
Currently i have build a simple vi and need to convert it to dll so that i can call it from my VB.net. But the problem is how to call the labview dll from my VB.net?
I know we must declare function something like this,
Auto function Bodeplot Lib"..\\Bodeplot.dll" (Byval Val1 as double, Byval Val2 as double,...) as double
but how to determine Val1, Val2 (and so on) is input for which data? if my vi have 10 input (frequency, Kc,Fcz,Fcp,Wzrhp,Wp,k,Wz,Beta and Operation) ? and how to select the output (my application have 3 possible output : magnitup loop,phase loop, and degree loop)
In addition, since I'm using Labview 8.0 , and as i know apllication builder for this version cannot convert vi to dll which contain Mathscript (but unfortunely, my vi all use Mathscript), so really hope someone can help me to convert my vi to dll using Labview 8.2 (which remove this limitation).
here I'm attach my Vi and really hope someone willing to help.
Thank you.
Attachments:
bodeplot.vi 1049 KBOn Sep 17, 6:40 am, cckoh <[email protected]> wrote:
> Dear all expert,
> I'm a student and very new in Labview programming.
> Currently i have build a simple vi and need to convert it to dll so that i can call it from my VB.net. But the problem is how to call the labview dll from my VB.net?
>
> I know we must declare function something like this,
>
> Auto function Bodeplot Lib"..\\Bodeplot.dll" (Byval Val1 as double, Byval Val2 as double,...) as double
>
> but how to determine Val1, Val2 (and so on) is input for which data? if my vi have 10 input (frequency, Kc,Fcz,Fcp,Wzrhp,Wp,k,Wz,Beta and Operation) ? and how to select the output (my application have 3 possible output : magnitup loop,phase loop, and degree loop)
>
> In addition, since I'm using Labview 8.0 , and as i know apllication builder for this version cannot convert vi to dll which contain Mathscript (but unfortunely, my vi all use Mathscript), so really hope someone can help me to convert my vi to dll using Labview 8.2 (which remove this limitation).
>
> here I'm attach my Vi and really hope someone willing to help.
>
> Thank you.
>
>
> bodeplot.vi:http://forums.ni.com/attachments/ni/170/272124/1/bodeplot.vi
If you insist on using Labview with your project then you should
consider using ActveX in place of using a dynamic link library to
interface to your VB.net code. You don't need "Application Builder"
if you use ActiveX. The Student, Basic and Full development versions
of Labview for Windows come with ActiveX capability. For more
information on ActiveX look up the subject ActiveX in Labview's Help
File.
Howard -
How to call the .dll use Jave
hello,
I will to call a .dll file in java
which function or API can do that ?
if someone knows , please tell me .
thanksYou must define "native" methods in java. The native methods allow you to call out of java into C programs (dll's on Windows, so's on unix.)
There is a java tutorial on native methods. Look for the buzzwords JNI, which is Java Native Interface. -
Hi,
I'm having trouble calling labview dll from C# to perform certain function.
The function supposed to return the values in the float Analysis[] array. However, when I execute it it only returns zero values.
It seems that some parameters are not properly passed to the dll.
Below is the function in the header file:
void __stdcall Optical_Center(char FileDirectory[], long ImagePtr,
short int Height, short int Width, char ReadFromFile, float Analysis[],
long lenAnalysis);
and my corresponding dll import in c#:
[DllImport(@"SMIA.dll", CharSet = CharSet.Ansi)]
public static extern void Optical_Center([MarshalAs(UnmanagedType.LPStr)]string FileDirectory, long ImagePtr,
short Height, short Width,char ReadFromFile, IntPtr Analysis,
long lenAnalysis);
string str = @"C:\SMIA.raw";
int len = 3;
long m_lenAnalysis = 3;
long m_ImagePtr = 0;
short m_Height = 2464;
short m_Width = 3280;
IntPtr m_PtrArray = Marshal.AllocHGlobal(len * Marshal.SizeOf(typeof(float)));
char m_ReadFromFile = '1';
Optical_Center(str,m_ImagePtr,m_Height,m_Width,m_ReadFromFile,m_PtrArray,m_lenAnalysis);
float[] m_Analysis = new float[len];
Marshal.Copy(m_PtrArray, floatArray,0,len);
Marshal.FreeHGlobal(m_PtrArray);
string printstr = "";
for (int i=0; i<len; i++)
printstr = printstr + floatArray[i].ToString() + "\n";
MessageBox.Show(printstr);
Appreciate if anyone can help, thanks.
KLI was just about to post the header file of the DLL, when
I noticed that there's a function called LVDLLStatus.
This little thingie turned out to be a rather handy tool.
With that function I found that in the DLL I had a problem
with another function that prevented the DLL to be correctly
loaded.
This other function in the DLL is for generating digital output
and it worked as it should, when tested from LV.
Anyway if someone is interested, I got it working by using
the LoadLibrary and GetProcAddress function, as in the
source code thatI posted earlier.
I will investigate what is wrong with that digital output, and
post into a another thread if I have problems with that. -
How to call VC++ dll whiich return char[] data type value in powerbuilder
Hi Everyone,
I am using PowerBuilder 11.1 build 8123.
I am calling VC++ DLL in our PowerBuilder application which return char[] data type value.
I just declare Global External Function:-
Function char getOSSectionName() library "DocServClient.dll" alias for "getOSSectionName;Ansi"
And then call this function in window as:-
Char ls_section[1] = 'DOCAPPLICATIONS9X'
ls_section[1]=getOSSectionName()
When I check ls_section[1] value in messagebox it display a symbol (please check attached attached image.)
VC++ function and return variable declaration:-
__declspec(dllexport) char * __stdcall getOSSectionName()
char SectionName[_MAX_PATH];
Please let me know that my code is valid or not.
Please help..Hi,
Thanks to Everyone for your suggestions.
I am solved my problem to change VC++ function as :-
Int __declspec(dllexport) __stdcall getOSSectionName(char* SectionName)
instead of
__declspec(dllexport) char * __stdcall getOSSectionName()
and declare global function as:-
Function int getOSSectionName(Ref char ls_section[100]) library "DocServClient.dll" alias for "getOSSectionName;Ansi"
and call function in window as:-
int li_ret
char ls_section[100]
string ls_sec
li_ret=getOSSectionName(REF ls_section)
ls_sec=ls_section
Thanks,
Vikrant -
How to call the DLL functions through Java
Hello,
I have already got a VC++ generated DLL. It has serveral functionalities. I need to call those functions from my Java Application. Now i know that it can be possible only through writing Java JNI Interfaces.
Everywhere i only see they give an example where in they tell to create an DLL. Now how do i will call if an DLL is ready and exists.
If anyone can give an example then it will be very helpful to me. Please mail me at [email protected] .
Thank you
vvpatroYou can't call functions in an arbitary DLL form Java. You need to use JNI to produce a 'wrapper' DLL that maps Java methods to the methods in the target DLL. The purpose of the wrapper is to allow type conversion between Java types and C/C++ types. The complexity of this task depends largely on the types used in th target DLL. If the targer DLL uses only primitive types such as char, byte, int, long, string, the translation is simple and the wrapper DLL will be 'thin'. If however, the target DLL passes arrays and objects, or employs callbacks, these more work to do, and the wrapper will be correspondingly 'thicker'.
Hope this helps. -
How to call a dll with special parameters in Labview?
Hi,
I have a dll file (compiled in C++) and I would like to call the individual functions from this dll file.
I do not know however, how I must correctly define the initial parameters in LabView.
That is the function, which I would like to call:
DWORD OpenDiagDriver ( char* port,
LPCSTR path,
CANObjects CANObj[],
WORD BitTiming = 0x4167);
CANObjects CANObj[] is a pointer to array with CAN configuration data
typedef struct
DWORD Ident;
BYTE Config;
}CANObjects;
CANObj[0].Ident= 0x18DA0000;
CANObj[0].Config= 0x8C;
CANObj[1].Ident= 0x18DA0000;
CANObj[1].Config= 0x84;
WORD BitTiming= 0x4167;
I made a vi, but it doesn’t work.
Attachments:
example.vi 29 KBHard to say without the full C source. Are you building the DLL according to the CIN rules (see Using External Code in LabVIEW)? Mapping clusters to C code in DLLs is not a simply process and we generally recommend to create wrappers. However, since your structures are fairly straightforward, you could use the "Adapt to Type" as you are trying to do.
I recommend checking out the mentioned manual and also the examples in \examples\dll\data passing\Call Native Code.llb and the associated C files.
Brian Tyler
http://detritus.blogs.com/lycangeek -
How to call labview DLL from visual C++?
Hi,
I'm trying to call a LV DLL from a VC++ application
by using the LoadLibrary and GetProcAddress functions.
The DLL contains a simple sum function. The Library is
loaded correctly, but the result is always 0.0000.
I have loaded a VC++ DLL in a similar way and it works
correctly. Also, I have tested the DLL by loading it in LV,
and it works correctly. The calling convention is defined
to be stdcall in LV Application Builder.
I have also tried this solution, but I will get a compiler error
from one the header files that are created by the LV when
the DLL is made. The error comes from this line
typedef char int8;
and the error states that
..\fundtypes.h(107) : error C2371: 'int8' : redefinition; different basic types
If someone knows of newer tutorial(for LV 8.2) or knows how to use those
LoadLibrary and GetProcAddress function for LV DLLs, I will appreciate the
information greatly.
Below is the code that I'm using for loading the LV DLL.
Thanks
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <map>
#include <windows.h>
int _tmain(int argc, _TCHAR* argv[])
HINSTANCE LVLib = LoadLibrary(TEXT("Testdll"));
typedef double (__stdcall *MYPROC)(double, double);
if (LVLib != NULL)
MYPROC ProcAdd = (MYPROC) GetProcAddress(LVLib, "Add");
if (ProcAdd != NULL)
double d = (ProcAdd)(5.5, 6.6);
printf("sum = %f\n", d);
else
printf("Invalid function pointer\n");
else
printf("Failed to load the library\n");
return 0;I was just about to post the header file of the DLL, when
I noticed that there's a function called LVDLLStatus.
This little thingie turned out to be a rather handy tool.
With that function I found that in the DLL I had a problem
with another function that prevented the DLL to be correctly
loaded.
This other function in the DLL is for generating digital output
and it worked as it should, when tested from LV.
Anyway if someone is interested, I got it working by using
the LoadLibrary and GetProcAddress function, as in the
source code thatI posted earlier.
I will investigate what is wrong with that digital output, and
post into a another thread if I have problems with that. -
How to call a DLL with a char or a uint8_t
Good afternoon,
I need to pass an array (image) to my dll.
I was able to successfully do this using
imageProcess(int **a, ... ){;}
function declaration and using a signed or unsigned 32 bit integer as data type in labview DLL call
However, when I changed my function to either
imageProcess(char **a, ... ){;} or
imageProcess(uint8_t **a, ... ){;}
And when I set the Labview Dll Call data type to unsigned 8 bit integer
I get a Broken Arrow
With error: The function name specified for this node cannot be found in the library. Right-click the Call Library Function node and select Configure, then choose the correct function name.
I am also using IMAQ ImageToArray to obtain my array and using the ImagePixels(U8) output
Thank you,Another possibility to make functions be unmangled is declaring them as extern "C" like this:
for a single function.
#define LibFunction __declspec(dllexport)
extern "C" MgErr LibFunction MyFunction(uInt8 *);
or:
#define LibFunction __declspec(dllexport)
#if defined(__cplusplus) || defined(__cplusplus__)
extern "C" {
#endif
LibFunction MgErr MyFunction1(void);
LibFunction MgErr MyFunction2(uInt32);
#if defined(__cplusplus) || defined(__cplusplus__)
#endif
for multiple function prototypes.
This will tell the compiler to not mangle the names if it is invoked on a cpp file. And the LibFunction declaration is to declare the function as exported to the compiler, saving you to have to provide a DEF file for that purpuse. Remember that other compilers and platforms might and often do use a different syntax for the export declaration.
And alternative could be:
#define LibFunction(retval) extern "C" retval __declspec(dllexport)
LibFunction(MgErr) MyFunction(uInt8 *);
Also before claiming that there is a huge bug in LabVIEW that needs fixing you should make sure that you understand all in and outs of your C compiler toolchain. Something I wouldn't dare to claim to do!
Rolf Kalbermatter
CIT Engineering Netherlands
a division of Test & Measurement Solutions -
Hi
I created one component in vb, where this component got 3 methods. and created dll also, when iam trying to use these dlls in java. it showing error, is there any method to call the vb dlls in java(native method), if s pls help me to solve these problem.hi, all
I writed a vb dll, It have three publice sub and one preporty,
I use html <object> attribute to declare this dll and call its methods and perporty in html file, everything is ok.the source code as following:
<body>
<OBJECT declare id="repExport" classid="clsid:0487D845-0DAD-46D0-9559-FADEC117C2B9">
<param name="Exportfile" value="peiru">
</OBJECT>
<script language="vbscript">
repExport.Exportfile="peiruyt"
repExport.CrystalConnect()
repExport.PassParameterRtp()
repExport.reportexport()
</script>
Because i need get parameter from other web page , and i use weblogic 6.1 server, so i need change file type from html to jsp , But even if I just change the file extension from html to jsp, don't change any content in this file.
then jsp cannot work, error message is "object don't support 'repExport.Exportfile' property", actual it don't support all three functions and a property
Can anyone provide any help?
thanks
peiru
Maybe you are looking for
-
I just installed the newest version of Firefox version30. It wont play videos on youtube but i figured out what to do to fix that (change to "never activate" on Shockwave Flash add-on in plugins). But if i leave that setting on then the game that i t
-
After iOS 5.0.1 OTA update Siri is no longer working
Anyone having the same issue? Since I updated to 5.0.1 Siri no longer works. All I get is the typical " I'm really sorry about but I can't take any requests right now. Please try again in a little while ". Any ideas? I've powered off the phone, reboo
-
40D automatically applies Contrast, Brightness?
Just bought a used 40D. I shoot in Raw. Set the Picture Style to Neural, no added Sharpening, Contrast, or Sat, all set to zero. But when I open the image in LR3.6, it has Med Contrast applied and also Brightness is at +50, Contrast +25. On my 5D all
-
I would like to make room on my external drive. I need to be able to delete the songs that are matched in iTunes. Using the delete right-click option does remove the entry form the itunes Directory but NOT the physical files. I have my iTunes Library
-
Using CASE within a function I wish to apply a second level of criteria within the CASE statement, something along the lines of the following: CASE upper(option_in) WHEN 'P' THEN decode(instr(value_in,'-')>1,value_in,plan_b) WHEN ... Looks nifty but