c++ - 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 的图像。
解决方案
看起来您正在写入 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 :)
推荐阅读
- reactjs - 通用高阶 React 组件给出类型错误
- go - 在 Go 中有没有办法将结构映射转换为结构切片
- javascript - For循环之前的异步获取/获取请求
- r - R 代码:使用最陡下降求根
- python - Selenium Python for 循环仅获取第一项
- firebase - 没有为“FirebaseUser”类定义吸气剂“实例”
- sql - SQL - 加入或联合两个表检查重复项?
- java - 为什么我的 mysql 连接器 jar 文件不能从 eclipse 中访问,尽管我有 mysql 连接器 jar 文件的构建路径?
- ios - 图像出现在 Xcode 的模拟器中,但不在设备上
- julia - 在 Julia 中将十六进制字符串转换为 base64