Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 防止从更高级别的DLL导出在静态库中定义的dllexport函数_C++_Windows_Dll_Dllexport - Fatal编程技术网

C++ 防止从更高级别的DLL导出在静态库中定义的dllexport函数

C++ 防止从更高级别的DLL导出在静态库中定义的dllexport函数,c++,windows,dll,dllexport,C++,Windows,Dll,Dllexport,我有一个静态库,其中有一个函数void f(),用\uu declspec(dllexport)声明。此static.lib链接到一个DLL。问题:此DLL最终导出f()(在.lib中定义),这是不需要的。这种出口能被打败吗 无论DLL中的f()的正向声明是否包含\uuu declspec(dllimport)或根本没有导出/导入指令,它都会产生影响f()以任何方式从DLL导出。Hmya,没有“oops,无意这么做”选项。让链接器选择在DLL源中定义的函数的另一个版本可能是另一种选择。但要做到正

我有一个静态库,其中有一个函数
void f()
,用
\uu declspec(dllexport)
声明。此static.lib链接到一个DLL。问题:此DLL最终导出
f()
(在.lib中定义),这是不需要的。这种出口能被打败吗


无论DLL中的
f()
的正向声明是否包含
\uuu declspec(dllimport)
或根本没有导出/导入指令,它都会产生影响
f()
以任何方式从DLL导出。

Hmya,没有“oops,无意这么做”选项。让链接器选择在DLL源中定义的函数的另一个版本可能是另一种选择。但要做到正确,就需要来源,鸡和蛋也是如此。也许/EXPORT与NONAME一起使用,所以只使用ordinal导出可能会起作用,但从未尝试过。@HansPassant:如果可以使用其他名称导出此函数,或者根本不使用名称,这可能会很好地解决我的所有问题。@RustyX:实际上,共享库没有看到
f()
dllexport
,正如我在问题中解释的那样。只有静态库是使用
dllexport
编译的。对不起,这意味着在没有
declspec(dllexport)
的情况下重新编译静态库。链接器只是从每个输入文件(.obj和.lib)收集所有
dllexport
声明,并在最终可执行文件/DLL中生成导出表。没有简单的方法可以解决这个问题。我知道你没有静态库的源代码(或者如果你有,你希望避免更改它们)。但是,您有静态库的头文件(如果有)吗(如果有,是否可以修改它)?