如何在FreeBasic DLL中获取当前文件名?

时间:2017-01-08 20:15:05

标签: dll freebasic

如何使FreeBASIC DLL找到自己的文件名和路径? 到目前为止我已经尝试过了:(用rundll32文件名运行它,DllMain) 代码:

#include "windows.bi"
Extern "Windows-MS"
Sub DllMain() Export
    dim This as String
    This = dir(command$(0))
    MessageBox( null, "Hello World", This, MB_OK )
End Sub
End Extern

。 。 。但它不起作用。

当我将它编译为EXE时,它可以正常工作。

有什么建议吗?谢谢!

1 个答案:

答案 0 :(得分:0)

我尝试将approach of this C++ snippet改编为FreeBASIC。乍一看,它似乎工作。但是:Snippet提供"原样",没有任何形式的担保。使用风险自负。

#include "windows.bi"

Const GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT = &H2
Const GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS = &H4

Extern "Windows-MS"

Function getMyPath() As String
    ' See https://stackoverflow.com/a/6924332/ 
    Dim path As ZString * 255
    Dim hm As HMODULE = NULL
    If GetModuleHandleEx( _
            GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS Or _ 
            GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, _
            Cast(LPCSTR, @getMyPath), _
            @hm _ 
        ) Then
            GetModuleFileName( hm, path, SizeOf( path ) )
    End If
    Return path
End Function

Sub DllMain() Export
    dim dllPath as String
    dllPath = getMyPath()
    MessageBox( null, dllPath, "Hello World", MB_OK )
End Sub

End Extern