I am having trouble with a plugin.
When I access it from the menu I get the message box ''Could not complete the Export command because there is not enough memory (RAM)''. The message box appears before my PluginMain is called.
It seems to be related to the linking somehow; when I do not link against a specific library my plugin works. Weirdly, it also works when I am linking against the library and not referencing any stl containers. The dll is loaded (DllMain() is called) but PluginMain() is never called.
dumpbin /exports gives me this output:
Section contains the following exports for photoshopexporter.8be
00000000 characteristics
463B2018 time date stamp Fri May 04 13:59:20 2007
0.00 version
1 ordinal base
1 number of functions
1 number of names
ordinal hint RVA name
1 0 00001163 PluginMain
Summary
52000 .data
2000 .idata
F7000 .rdata
2B000 .reloc
2000 .rsrc
449000 .text
When looking at the dumpbin output of the ''Outbound'' sample I notice that the PluginMain() has an RVA of 1000. There is also a comment in the ''Outbound'' source saying ''...most development systems require [PluginMain] be the first routine in the source.'' Is there a way to control the RVA of an exported function, and does it matter to Photoshop?
I have checked the DLL with depends.exe without finding any unresolved dependencies.
Is there a way to get more information from Photoshop as to why the plugin fails? Like a ''Photoshop Console'' or similar?
Debugging a plugin
What development system are you using?
Can you show your source/Makefile?
Did you start by compiling one of the sample plugins?
Debugging a plugin
I am using vc2005.
I guess I could post a code snippet, but as it is the code isn't really doing anything; it never reaches PluginMain().
I have compiled the ''Outbound'' plugin, and it works perfectly. I have also compared my project settings to ''Outbound'' and not found any notable differences (of course, _something_ must be different though :).
Have you checked your PiPL for correctness?
Yes, at least I think it is correct. I compile it with the same commandline as is used in the ''Outbound'' example:
#define plugInName ''My Test Exporter''
#define plugInCopyrightYear ''2007''
#define plugInDescription \
''Test export plug-in module for Adobe Photoshop篓.''
#define ResourceID 16000
#include ''PIGeneral.h''
//------------------------------------------------------------------------------ -
// PiPL resource
//------------------------------------------------------------------------------ -
resource 'PiPL' (ResourceID, plugInName '' PiPL'', purgeable)
{
{
Kind { Export },
Name { plugInName ''...'' },
Version { (latestExportVersion %26lt;%26lt; 16) | latestExportSubVersion },
CodeWin32X86 { ''PluginMain'' },
SupportedModes
{
noBitmap, doesSupportGrayScale,
doesSupportIndexedColor, doesSupportRGBColor,
doesSupportCMYKColor, doesSupportHSLColor,
doesSupportHSBColor, doesSupportMultichannel,
doesSupportDuotone, doesSupportLABColor
},
EnableInfo
{
''in (PSHOP_ImageMode, GrayScaleMode,''
''IndexedColorMode, RGBMode,''
''CMYKMode, HSLMode,''
''HSBMode, MultichannelMode,''
''DuotoneMode, LabMode)''
}
}
};
Yes, that looks kosher. Re-reading your original message, hmm, I see it was unlikely to be the PiPL anyway.
I don't use VS to build my Win32 plugins, so I can't be sure, but I know that CodeWarrior used separate DLL versions of some libraries. Are you setting everything up correctly in VS for a DLL build product?
Subscribe to:
Post Comments
(Atom)
No comments:
Post a Comment