Option 1) figure out where to put the def file. Without it, you probably won't get anywhere.
Option 2) install Visual Studio
#import "PExpDll.dll"
int GetIntValue(int);
double GetDoubleValue(double);
string GetStringValue(string);
#import
According to the rules of function declaration in MQL-4, you have a clear error:
int GetIntValue(int X); double GetDoubleValue(double X); string GetStringValue(string X);
There is no input parameter name, only type. This is not allowed in MQL-4.
According to the rules of function declaration in MQL-4, there is a glaring error:
There is no input parameter name, only type. In MQL-4 it is not allowed.
What the compiler doesn't swear at, you can.
I tried writing it this way:
#import "timeService.dll" // функция, выдающее смещение от Utc // до времени сервера и до локального времени int timeService( string , // <--- убрал имя переменной int & utcToServer[], int & utcToLocal[] ); #import
Everything works fine.
Actually, according to C and C++ canons, you don't have to specify parameter names at all.
moreover, in most cases the programmer is busy sitting and commenting on them.
Thank you very much for your advice, thank you for responding.
1. In MT4 I have Service-Settings-Advisors-Confirm call of dll functions ticked. So, when I run script, it asks me if I should call such function...? I select "Yes" and then the following error comes: cannot call function from dll (error 127).
2. What about declarations of functions without parameters like double GetDoubleValue(double), it is written so in the samples, especially since the compiler doesn't complain about it, so it is ok.
3. But what about the def-file... Sure, maybe it's because of def-file, but I really don't know where to put it. In C++ Builder 6 and 2009 projects there are no such files with such an extension, i.e. when building the dll itself there seems to be nowhere to put it. In the same folder under the same name in \MetaTrader 4\experts\libraries folder is not the same... tried it... In short, it's not clear. Tried another example where a ready-made system dll is used
#import "kernel32.dll"
int _lopen (string path, int of);
int _lcreat (string path, int attrib);
int _llseek (int handle, int offset, int origin);
int _lread (int handle, string buffer, int bytes);
int _lwrite (int handle, string buffer, int bytes);
int _lclose (int handle);
#import
These functions are called. The reason for DLLSample is unclear.
If the reason is in the Linker, what can it be? I seem to be making the file standalone.
Uh... yeah... I don't get it. And the example in MT4 is sure to work? Has anyone checked it to see if it works?
Thank you all for responding and responding.
{...} 3. As for the def file... Of course, maybe it's because of it, but it's really not clear where to put it. In C++ Builder 6 and 2009 projects there are no such files with this extension, i.e. when building the dll itself there seems to be nowhere to stick it. In the same folder under the same name in \MetaTrader 4\experts\libraries folder is not the same... tried it... In short, it's not clear. Tried another example that uses a ready-made system dll {...}
These functions are called... The reason for DLLSample is unclear.
If the reason is in the Linker, what could it be? I seem to be making the file standalone.
M...yeah...it's not clear. Is the example in MT4 sure it works? Has anyone tested it to see if it works?
Thank you all for responding and responding.
1) even though the builder is ahem... "slightly" wrong, def file is still needed
2) Have you tried to install Visual Studio yet?
3) example works. wrong builder.
1) even though the builder is ahem... "slightly" wrong, def file is still needed
2) you haven't tried Visual Studio yet
3) example works. wrong builder.
i actually made dlls for mt4 on bilder, def-file wasn't useful...
I used to make dlls for mt4 on dibilder, def-file was not useful...
Share an example with a colleague :-).
Maybe you need to write some squiggle before declaration of function there.
.
And bilder... I still have a copy of 6 with 4 service packs on it.
Stopped using it after a funny case :-).
When I add a function to a .cpp file, I get all sorts of glitches :-).
The glitches consisted in that the builder would lie about the parameters passed into the function through the stack.
You delete the function - everything is fine again.
I can also recall global variables which are accessible only from a module,
where they are declared, and from the rest you see rubbish :-).
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
I want to learn how to import functions from dll. I've tried different variants, but the following error keeps coming up: cannot call function from dll (error 127).
1. I tried compiling my project in C++ Builder 6.
2. same project in C++ Builder 2009.
3. I created a project from the DLLSample example in C++ Builder 2009, compiled it.
Same result everywhere: cannot call function from dll (error 127).
To test it, I use the script with PExpDll.dll - compiled library in C++ Builder 2009 from DLLSample example, that comes with MetaTrader 4.
Here is this script:
#property copyright "Copyright © 2008, MetaQuotes Software Corp."
#property link "https://www.metaquotes.net//"
#import "PExpDll.dll"
int GetIntValue(int);
double GetDoubleValue(double);
string GetStringValue(string);
#import
//+------------------------------------------------------------------+
//| script program start function |
//+------------------------------------------------------------------+
int start()
{
//----
Print("Script start");
GetStringValue("I wonder if this will work?");
GetIntValue(10);
//----
return(0);
}
//+------------------------------------------------------------------+
Please help, tell me what I'm doing wrong...?
Thank you in advance.