• Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
    Dedicated community for Japanese speakers
  • 한국 커뮤니티
    Dedicated community for Korean speakers
Exit
1

An elegant way to allow aex to load DLLs under custom paths

Explorer ,
Jan 30, 2023 Jan 30, 2023

Copy link to clipboard

Copied

Hi guys,

 

We developers used to be very troubled by the problem of loading dlls, that we have to put our dlls referenced by our plugins into "Support Files", which is absolutely troublesom. But I found a relatively elegant way to solve this problem in Windows.

 

To do this, we need to know two things about the plugin loading order.

 

The first is about the scanning order. I tested some kind of plugin name, and got a result that '$' > '%' > '0'-'9' > '' > '^' > '_' > '{', so for example, the order to load is "$foo.aex" > "%foo.aex" > "0foo.aex" > "9foo.aex" > "foo.aex" > "^foo.aex" > "_foo.aex" > "{foo.aex". The rule above treats files and directories as the same, so when scanning a directory AE will dive in and continue scanning items under that folder.

 

Second, AE loads plugins under "MediaCore" first and then "Plug-ins".

 

So the solution is, build a plugin that sets the custom dll search path into environment variable "PATH" in the DllMain function which is called on load, and use rules above to make sure this dummy plugin loads before your real plugin, that's much nicer than just dropping dlls into "Support Files" ahh.

 

The DllMain function can be defined as below:

// DllMain is called on load from process or thread
BOOL WINAPI DllMain(HMODULE hModule,
	DWORD ul_reason_for_call,
	LPVOID lpReserved
) {
    // set env when loaded for process_attach
    // not thread_attach
	if (ul_reason_for_call == DLL_PROCESS_ATTACH) {
		_wputenv_s("PATH", LR"(C:\your\dll\folder)"); // set envienoment
		return true;
	}
}

 

The last question is how to hide this plugin. You can simply set the "Kind" property to "AEGP" in PiPL to prevent it from being searched, so I recommend you build this dummy plugin based on the AEGP sample project, like "ProjDumper".

TOPICS
SDK

Views

405

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines

correct answers 1 Correct answer

Explorer , Jan 30, 2023 Jan 30, 2023

Seems that the group policy may affect this, I have never thought of that. 

Votes

Translate

Translate
Enthusiast ,
Jan 30, 2023 Jan 30, 2023

Copy link to clipboard

Copied

Wow!  I have searched for an answer to this for quite some time.  Thank you for sharing the implementation!  I also do not think it's best practice to place third-party dll files in the host app directory, but couldn't figure it out.  I will need to test out your findings, but could be a while.  Thanks again for sharing this!

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Explorer ,
Jan 30, 2023 Jan 30, 2023

Copy link to clipboard

Copied

oh I forgot to return true at the end of DllMain. 

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
LEGEND ,
Jan 30, 2023 Jan 30, 2023

Copy link to clipboard

Copied

It probably falls apart on a restricted system where the default DLL load policy is overridden by a group policy setting or paths can't be manipulated in user space.

 

Mylenium 

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Explorer ,
Jan 30, 2023 Jan 30, 2023

Copy link to clipboard

Copied

LATEST

Seems that the group policy may affect this, I have never thought of that. 

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines