Calling DLL functions with structs

Phil (OmnisList) phil at pgpotter.co.uk
Fri Aug 18 08:12:36 UTC 2023


Hi Dean,

Basically nothing else but to confirm that CallDLL does not handle 
structures like that....

But also noting that you would of needed the W variant of the call.

For something like this, I'd do an external xcomp...

If that is a consideration, you might consider expanding/looking at the 
Omnis System Info xcomp on GitHub:
https://github.com/OmnisStudio/Omnis-Sysinfo

regards
Phil Potter
Based in Chester in the UK.

On 18/08/2023 02:49, Dean Leggo wrote:
> Hey everyone
>
> I am working on a project to convert some Visual Basic code to Omnis 
> and the code block makes a number of DLL calls with structs. But 
> Omnis' [Register 
> DLL](https://www.omnis.net/developers/resources/onlinedocs/index.jsp?detail=CommandRef/Commands_A-Z/register_dll.html) 
> does not support structs.
>
> Has anyone passed a struct to a DLL or how can I call the DLL function?
>
> An example could be 
> [GetDiskSpaceinformationA](https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-getdiskspaceinformationa)
> I want to call it like the code below. This won't work as you cannot 
> declare structs and the types are probably wrong. But this is want I 
> am wanting to do.
>
> Register DLL ("KERNEL32.DLL","CreateFileA","AC(RRRRRRRRRJJ)")
> Do 
> lrowDiskSpace.$define(int64,int64,int64,int64,int64,int64,int64,int64,int64,int64,int64,char4,char4)
> Calculate lsDirectory as '%localappdata%\Omnis Software'
> Call DLL ("KERNEL32.DLL","CreateFileA",lsDirectory,lrowDiskSpace) 
> Returns lbOK
>
> Cheers,
> Dean Leggo
>


More information about the omnisdev-en mailing list