我希望我的应用程序始终使用nVidia Optimus笔记本电脑上的真实gpu运行。
从“在Optimus系统上启用高性能图形渲染”,(http://developer.download.nvidia.com/devzone/devcenter/gamegraphics/files/OptimusRenderingPolicies.pdf):
全局变量NvOptimusEnablement(驱动程序版本302中的新增功能) 从Release 302驱动程序开始,应用程序开发人员可以 在运行时指示Optimus驱动程序以使用高性能 图形来呈现任何应用程序 - 甚至是那些应用程序 没有现有的应用程序配置文件他们可以做到这一点 导出名为NvOptimusEnablement的全局变量。擎天柱 driver查找导出的存在和值。只有LSB 在这个时候,DWORD很重要。值0x00000001表示 应使用高性能图形执行渲染。一个 值0x00000000表示应忽略此方法。 用法示例:
extern "C" { _declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001; }
问题是我想用Delphi做这件事。据我所知,即使存在一些黑客攻击,Delphi也不支持导出变量。我确实尝试了其中一些,但无法使其发挥作用。
在同一个nvidia文档中,我读到强制正确的GPU可以通过静态链接到极少数列出的dll之一来完成。但我不想链接到我没有使用的dll。 (为什么opengl.dll不是我的其中之一。)一个简单的导出变量似乎更清晰。
答案 0 :(得分:4)
据我所知,Delphi不支持导出变量。
该陈述不正确。这是最简单的示例,演示如何从Delphi DLL导出全局变量:
library GlobalVarExport;
uses
Windows;
var
NvOptimusEnablement: DWORD;
exports
NvOptimusEnablement;
begin
NvOptimusEnablement := 1;
end.
我认为你的问题是你这样写的:
library GlobalVarExport;
uses
Windows;
var
NvOptimusEnablement: DWORD=1;
exports
NvOptimusEnablement;
begin
end.
无法使用此错误编译:
E2276 Identifier 'NvOptimusEnablement' cannot be exported
我不明白为什么编译器不喜欢第二个版本。这可能是一个错误。但是第一个版本的解决方法很好。
答案 1 :(得分:0)
我不是Delphi专家,但是AFAIK可以链接到Delphi中用C实现的静态库。所以我只是创建一个小的存根库,只提供这个导出,它静态链接到你的Delphi程序。这会增加您需要的导出。