首页 > 解决方案 > Visual Studio 中是否存在影响自定义 DLL 函数创建文件的位置的设置?

问题描述

我已经编写了自定义 DLL,其中包含适用于 pdf 的脚本语言的函数。当我调用我的创建函数时,它可以工作,但它会在我的 C++ 项目调试目录中创建 pdf。我没有指定一个完全合格的路径作为即时测试。是否有可以在visual studio中控制它并以某种方式在dll中的设置?如果我指定一个完整路径,它会返回一个错误,假设因为它是在我的项目文件夹中开始的......有人知道吗?

MV_EL_FunctionParameter pdfApCreate_parameters[] = {
    { "filename", 8, EPF_NORMAL },
    { "location", 8, EPF_NORMAL }
};
__declspec(dllexport) void bi_pdfApCreate(mvProgram prog, mvVariableHash parameters, mvVariable returnvalue, void **)
{
    int ret = LoadApWDll();
    if (!ret)
    {
        mvVariable_SetValue_Integer(returnvalue, 33333);
        return;
    }


    // INPUTS
    int filename_len;
    const char* filename;
    int location;

    // OUTPUT
    long id;

    // Not needed anymore, for a depricated Miva API function.
    //char* resolved_filename = NULL;
    //int resolved_filename_len;

    filename = mvVariable_Value(mvVariableHash_Index(parameters, 0), &filename_len);
    location = file_location(mvVariableHash_Index(parameters, 1));
    //mvFile_Resolve(prog, location, filename, filename_len, &resolved_filename, &resolved_filename_len);
    
    id = pApCreate((char*)filename);
    if (id) { mvProgram_Free(prog, const_cast<char*>(filename)); }
    mvVariable_SetValue_Integer(returnvalue, id);

}

这是人们离开的地方。这是为 Miva 脚本语言创建函数。这是他们用来构建它的自定义 API。这是 Miva Mia 的图像。Miva Mia Web 服务器

标签: c++visual-studiodll

解决方案


看起来您正在写入 Win32(与 .Net 或 .Net Core 相比)。

不会推荐“硬编码路径”——这太脆弱了。

相反,我会建议其中之一:

  • 从环境变量中读取路径
  • 使用相对于 .exe 的路径

在 Win32 中获取路径:

TCHAR szFileName[MAX_PATH];
GetModuleFileName(NULL, szFileName, MAX_PATH)

要在 .Net 中获取路径:

System.IO.Path.GetDirectoryName(
    System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)

如果您选择使用环境变量:

  • 您可以在 Visual Studio 中设置变量
  • 对于“生产”,您可能会从 .bat 文件中调用 .exe,并在 .bat 文件中设置环境变量

另一种选择是让.exe确定路径,并将路径字符串作为函数参数传递给 .dll :)


推荐阅读