当我调用我的create函数时,它可以工作,但它会在我的C++项目调试目录中创建pdf。我没有在im测试中指定完全限定的路径。有没有一个设置可以在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,im用来构建它。这是一张Miva Mia的照片。

发布于 2021-05-06 07:45:22
看起来你在写Win32 (对比.Net,或者.Net核心)。
我不推荐“硬编码路径”--那太脆弱了。
相反,我会建议以下其中之一:
的路径
要获取Win32中的路径,请执行以下操作:
TCHAR szFileName[MAX_PATH];
GetModuleFileName(NULL, szFileName, MAX_PATH)要获取.Net中的路径,请执行以下操作:
System.IO.Path.GetDirectoryName(
System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)如果选择使用环境变量:
中设置环境变量
另一种选择是让.exe确定路径,并将路径字符串作为函数参数传递给.dll :)
发布于 2021-05-06 07:35:04
Visual Studio有一个指定Working Directory的设置,但该设置仅在从Visual Studio运行时使用。
但是,您永远不应该依赖当前的工作目录。指定完整路径。
请显示“返回错误”的代码-这可能是您的错误。
https://stackoverflow.com/questions/67410031
复制相似问题