https://bugs.winehq.org/show_bug.cgi?id=48677
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|REOPENED |NEW
--- Comment #5 from Anastasius Focht focht@gmx.net --- Hello folks,
using Mono trace facility it reveals:
(NOTE: 'ChromaPlugin.dll' hosts AcoustID plugin)
--- snip --- $ pwd /home/focht/.wine/drive_c/Program Files (x86)/Exact Audio Copy
$ WINEDEBUG=+seh,+loaddll WINE_MONO_TRACE=all wine ./EAC.exe >>log.txt 2>&1 ... 007a:trace:loaddll:load_native_dll Loaded L"C:\Program Files (x86)\Exact Audio Copy\PluginHandler.dll" at 0xf830000: native 007a:trace:loaddll:load_native_dll Loaded L"C:\windows\mono\mono-2.0\lib\mono\gac\System\4.0.0.0__b77a5c561934e089\System.dll" at 0xf840000: native [0000007A: 0.01398 0] ENTER: (wrapper runtime-invoke) object:runtime_invoke_void__this__ (object,intptr,intptr,intptr)([MetadataPlugIn.PluginHandler:0DC00388], 00000000, 0134EFD4, 0F782DF0, ) [0000007A: 0.01401 1] ENTER: MetadataPlugIn.PluginHandler:.ctor ()(this:0DC00388[MetadataPlugIn.PluginHandler mscorlib.dll], ) [0000007A: 0.01417 2] ENTER: (wrapper alloc) object:AllocVector (intptr,intptr)(01DC22C8, 00000000, ) [0000007A: 0.01418 2] LEAVE: (wrapper alloc) object:AllocVector (intptr,intptr)[HelperFunctionsLib.IMetadataRetriever[]:0DC00458] [0000007A: 0.01419 2] ENTER: (wrapper alloc) object:AllocVector (intptr,intptr)(01DC24C8, 00000000, ) [0000007A: 0.01420 2] LEAVE: (wrapper alloc) object:AllocVector (intptr,intptr)[HelperFunctionsLib.IAudioDataTransfer[]:0DC00468] [0000007A: 0.01420 2] ENTER: (wrapper alloc) object:AllocSmall (intptr,intptr)(01DC25E8, 00000018, ) ... [0000007A: 0.32151 7] ENTER: (wrapper managed-to-native) System.Reflection.Assembly:LoadFile_internal (string,System.Threading.StackCrawlMark&)([STRING:0DC0F998:C:\Program Files (x86)\Exact Audio Copy\ChromaPlugin.dll], [BYREF:0134ED1C], ) 007a:trace:loaddll:load_native_dll Loaded L"C:\Program Files (x86)\Exact Audio Copy\ChromaPlugin.dll" at 0xfb30000: native [0000007A: 0.32389 7] LEAVE: (wrapper managed-to-native) System.Reflection.Assembly:LoadFile_internal (string,System.Threading.StackCrawlMark&)[System.Reflection.RuntimeAssembly:0DC0FA18] [0000007A: 0.32401 7] ENTER: System.Reflection.Assembly:op_Inequality (System.Reflection.Assembly,System.Reflection.Assembly)([System.Reflection.RuntimeAssembly:0DC0FA18], 00000000, ) [0000007A: 0.32403 7] LEAVE: System.Reflection.Assembly:op_Inequality (System.Reflection.Assembly,System.Reflection.Assembly)result=277086977 [0000007A: 0.32403 6] LEAVE: System.Reflection.Assembly:LoadFile (string,System.Security.Policy.Evidence)[System.Reflection.RuntimeAssembly:0DC0FA18] [0000007A: 0.32404 5] LEAVE: System.Reflection.Assembly:LoadFile (string)[System.Reflection.RuntimeAssembly:0DC0FA18] [0000007A: 0.32411 5] ENTER: System.Reflection.Assembly:CreateInstance (string)(this:0DC0FA18[System.Reflection.RuntimeAssembly mscorlib.dll], [STRING:0F7EC120:MetadataPlugIn.MetadataRetriever], ) [0000007A: 0.32425 6] ENTER: System.Reflection.Assembly:CreateInstance (string,bool)(this:0DC0FA18[System.Reflection.RuntimeAssembly mscorlib.dll], [STRING:0F7EC120:MetadataPlugIn.MetadataRetriever], 0, ) [0000007A: 0.32437 7] ENTER: System.Reflection.RuntimeAssembly:GetType (string,bool,bool)(this:0DC0FA18[System.Reflection.RuntimeAssembly mscorlib.dll], [STRING:0F7EC120:MetadataPlugIn.MetadataRetriever], 0, 0, ) [0000007A: 0.32449 8] ENTER: string:memset (byte*,int,int)(0134EBA0, 0, 68, ) [0000007A: 0.32450 8] LEAVE: string:memset (byte*,int,int) [0000007A: 0.32451 8] ENTER: (wrapper managed-to-native) System.Reflection.Assembly:InternalGetType (System.Reflection.Assembly,System.Reflection.Module,string,bool,bool)([System.Reflection.RuntimeAssembly:0DC0FA18], 00000000, [STRING:0F7EC120:MetadataPlugIn.MetadataRetriever], 0, 0, ) [0000007A: 0.32453 8] LEAVE: (wrapper managed-to-native) System.Reflection.Assembly:InternalGetType (System.Reflection.Assembly,System.Reflection.Module,string,bool,bool)[OBJECT:00000000] [0000007A: 0.32454 7] LEAVE: System.Reflection.RuntimeAssembly:GetType (string,bool,bool)[OBJECT:00000000] [0000007A: 0.32454 6] LEAVE: System.Reflection.Assembly:CreateInstance (string,bool)[OBJECT:00000000] [0000007A: 0.32455 5] LEAVE: System.Reflection.Assembly:CreateInstance (string)[OBJECT:00000000] [0000007A: 0.32456 5] ENTER: System.Reflection.Assembly:CreateInstance (string)(this:0DC0FA18[System.Reflection.RuntimeAssembly mscorlib.dll], [STRING:0F7EC170:AudioDataPlugIn.AudioDataTransfer], ) [0000007A: 0.32457 6] ENTER: System.Reflection.Assembly:CreateInstance (string,bool)(this:0DC0FA18[System.Reflection.RuntimeAssembly mscorlib.dll], [STRING:0F7EC170:AudioDataPlugIn.AudioDataTransfer], 0, ) [0000007A: 0.32458 7] ENTER: System.Reflection.RuntimeAssembly:GetType (string,bool,bool)(this:0DC0FA18[System.Reflection.RuntimeAssembly mscorlib.dll], [STRING:0F7EC170:AudioDataPlugIn.AudioDataTransfer], 0, 0, ) [0000007A: 0.32458 8] ENTER: string:memset (byte*,int,int)(0134EBA0, 0, 68, ) [0000007A: 0.32459 8] LEAVE: string:memset (byte*,int,int) [0000007A: 0.32460 8] ENTER: (wrapper managed-to-native) System.Reflection.Assembly:InternalGetType (System.Reflection.Assembly,System.Reflection.Module,string,bool,bool)([System.Reflection.RuntimeAssembly:0DC0FA18], 00000000, [STRING:0F7EC170:AudioDataPlugIn.AudioDataTransfer], 0, 0, ) 007a:trace:loaddll:load_native_dll Loaded L"C:\Program Files (x86)\Exact Audio Copy\Interop.HelperFunctionsLib.dll" at 0xfb40000: native [0000007A: 0.32666 8] LEAVE: (wrapper managed-to-native) System.Reflection.Assembly:InternalGetType (System.Reflection.Assembly,System.Reflection.Module,string,bool,bool)[System.RuntimeType:0F80D188] [0000007A: 0.32668 7] LEAVE: System.Reflection.RuntimeAssembly:GetType (string,bool,bool)[System.RuntimeType:0F80D188] [0000007A: 0.32680 7] ENTER: System.Activator:CreateInstance (System.Type)([TYPE:AudioDataPlugIn.AudioDataTransfer], ) [0000007A: 0.32688 8] ENTER: System.Activator:CreateInstance (System.Type,bool)([TYPE:AudioDataPlugIn.AudioDataTransfer], 0, ) [0000007A: 0.32702 9] ENTER: System.Activator:CreateInstance (System.Type,bool,bool)([TYPE:AudioDataPlugIn.AudioDataTransfer], 0, 1, ) ... [0000007A: 0.33116 15] ENTER: (wrapper managed-to-native) System.RuntimeTypeHandle:GetAttributes (System.RuntimeType)([TYPE:AudioDataPlugIn.AudioDataTransfer], ) [0000007A: 0.33117 15] LEAVE: (wrapper managed-to-native) System.RuntimeTypeHandle:GetAttributes (System.RuntimeType)result=1048577 [0000007A: 0.33118 14] LEAVE: System.RuntimeType:GetAttributeFlagsImpl ()result=1048577 [0000007A: 0.33118 13] LEAVE: System.Type:get_IsAbstract ()result=30932992 [0000007A: 0.33119 13] ENTER: System.Reflection.RuntimeConstructorInfo:InternalInvoke (object,object[],bool)(this:0DC0FB48[System.Reflection.RuntimeConstructorInfo mscorlib.dll], 00000000, 00000000, 1, ) [0000007A: 0.33120 14] ENTER: (wrapper managed-to-native) System.Reflection.RuntimeConstructorInfo:InternalInvoke (System.Reflection.RuntimeConstructorInfo,object,object[],System.Exception&)([System.Reflection.RuntimeConstructorInfo:0DC0FB48], 00000000, 00000000, [BYREF:0134E8F8], ) [0000007A: 0.33150 15] ENTER: (wrapper runtime-invoke) object:runtime_invoke_void__this__ (object,intptr,intptr,intptr)([AudioDataPlugIn.AudioDataTransfer:0DC0FB88], 00000000, 0134E63C, 0FB2D028, ) [0000007A: 0.33152 16] ENTER: AudioDataPlugIn.AudioDataTransfer:.ctor ()(this:0DC0FB88[AudioDataPlugIn.AudioDataTransfer mscorlib.dll], ) [0000007A: 0.33153 16] LEAVE: AudioDataPlugIn.AudioDataTransfer:.ctor () [0000007A: 0.33154 15] LEAVE: (wrapper runtime-invoke) object:runtime_invoke_void__this__ (object,intptr,intptr,intptr)[OBJECT:00000000] [0000007A: 0.33154 14] LEAVE: (wrapper managed-to-native) System.Reflection.RuntimeConstructorInfo:InternalInvoke (System.Reflection.RuntimeConstructorInfo,object,object[],System.Exception&)[AudioDataPlugIn.AudioDataTransfer:0DC0FB88] [0000007A: 0.33155 13] LEAVE: System.Reflection.RuntimeConstructorInfo:InternalInvoke (object,object[],bool)[AudioDataPlugIn.AudioDataTransfer:0DC0FB88] [0000007A: 0.33156 12] LEAVE: System.RuntimeType:CreateInstanceMono (bool,bool)[AudioDataPlugIn.AudioDataTransfer:0DC0FB88] [0000007A: 0.33157 11] LEAVE: System.RuntimeType:CreateInstanceSlow (bool,bool,bool,bool)[AudioDataPlugIn.AudioDataTransfer:0DC0FB88] [0000007A: 0.33157 10] LEAVE: System.RuntimeType:CreateInstanceDefaultCtor (bool,bool,bool,bool,System.Threading.StackCrawlMark&)[AudioDataPlugIn.AudioDataTransfer:0DC0FB88] [0000007A: 0.33158 9] LEAVE: System.Activator:CreateInstance (System.Type,bool,bool)[AudioDataPlugIn.AudioDataTransfer:0DC0FB88] [0000007A: 0.33159 8] LEAVE: System.Activator:CreateInstance (System.Type,bool)[AudioDataPlugIn.AudioDataTransfer:0DC0FB88] [0000007A: 0.33159 7] LEAVE: System.Activator:CreateInstance (System.Type)[AudioDataPlugIn.AudioDataTransfer:0DC0FB88] [0000007A: 0.33160 6] LEAVE: System.Reflection.Assembly:CreateInstance (string,bool)[AudioDataPlugIn.AudioDataTransfer:0DC0FB88] [0000007A: 0.33161 5] LEAVE: System.Reflection.Assembly:CreateInstance (string)[AudioDataPlugIn.AudioDataTransfer:0DC0FB88] [0000007A: 0.33183 5] ENTER: (wrapper runtime-invoke) object:runtime_invoke_void__this__ (object,intptr,intptr,intptr)([System.InvalidCastException:0DC0FBB0], 00000000, 0134EBCC, 0FB2D650, ) [0000007A: 0.33186 6] ENTER: System.InvalidCastException:.ctor ()(this:0DC0FBB0[System.InvalidCastException mscorlib.dll], ) [0000007A: 0.33187 7] ENTER: System.SystemException:.ctor (string)(this:0DC0FBB0[System.InvalidCastException mscorlib.dll], [STRING:0F7EC210:Specified cast is not valid.], ) [0000007A: 0.33189 8] ENTER: System.Exception:.ctor (string)(this:0DC0FBB0[System.InvalidCastException mscorlib.dll], [STRING:0F7EC210:Specified cast is not valid.], ) [0000007A: 0.33191 9] ENTER: System.Exception:Init ()(this:0DC0FBB0[System.InvalidCastException mscorlib.dll], ) [0000007A: 0.33192 10] ENTER: System.Exception:set_HResult (int)(this:0DC0FBB0[System.InvalidCastException mscorlib.dll], -2146233088, ) [0000007A: 0.33192 10] LEAVE: System.Exception:set_HResult (int) [0000007A: 0.33193 10] ENTER: (wrapper alloc) object:AllocSmall (intptr,intptr)(01D88A30, 0000001C, ) [0000007A: 0.33194 10] LEAVE: (wrapper alloc) object:AllocSmall (intptr,intptr)[System.Runtime.Serialization.SafeSerializationManager:0DC0FC40] [0000007A: 0.33196 10] ENTER: System.Runtime.Serialization.SafeSerializationManager:.ctor ()(this:0DC0FC40[System.Runtime.Serialization.SafeSerializationManager mscorlib.dll], ) [0000007A: 0.33197 10] LEAVE: System.Runtime.Serialization.SafeSerializationManager:.ctor () [0000007A: 0.33198 9] LEAVE: System.Exception:Init () [0000007A: 0.33198 8] LEAVE: System.Exception:.ctor (string) [0000007A: 0.33199 8] ENTER: System.Exception:set_HResult (int)(this:0DC0FBB0[System.InvalidCastException mscorlib.dll], -2146233087, ) [0000007A: 0.33200 8] LEAVE: System.Exception:set_HResult (int) [0000007A: 0.33200 7] LEAVE: System.SystemException:.ctor (string) [0000007A: 0.33201 7] ENTER: System.Exception:set_HResult (int)(this:0DC0FBB0[System.InvalidCastException mscorlib.dll], -2147467262, ) [0000007A: 0.33202 7] LEAVE: System.Exception:set_HResult (int) [0000007A: 0.33202 6] LEAVE: System.InvalidCastException:.ctor () [0000007A: 0.33203 5] LEAVE: (wrapper runtime-invoke) object:runtime_invoke_void__this__ (object,intptr,intptr,intptr)[OBJECT:00000000] [0000007A: 0.33215 5] ENTER: (wrapper runtime-invoke) <Module>:runtime_invoke_object__this__ (object,intptr,intptr,intptr)([System.InvalidCastException:0DC0FBB0], 00000000, 0134EBC0, 0FB2DC70, ) [0000007A: 0.33217 6] ENTER: System.Exception:get_Message ()(this:0DC0FBB0[System.InvalidCastException mscorlib.dll], ) [0000007A: 0.33217 6] LEAVE: System.Exception:get_Message ()[STRING:0F7EC210:Specified cast is not valid.] [0000007A: 0.33218 5] LEAVE: (wrapper runtime-invoke) <Module>:runtime_invoke_object__this__ (object,intptr,intptr,intptr)[STRING:0F7EC210:Specified cast is not valid.] [0000007A:] EXCEPTION handling: System.InvalidCastException: Specified cast is not valid. EXCEPTION: catch found at clause 1 of MetadataPlugIn.PluginHandler:.ctor () --- snip ---
Apparently Wine-Mono can't create 'AudioDataPlugIn.AudioDataTransfer' instance from the loaded plugin assembly hence the plugin is not considered valid.
The plugin loader handles two types of plugins, implementing either:
* IMetadataRetriever * IAudioDataTransfer
--- snip --- // Type: MetadataPlugIn.PluginHandler // Assembly: PluginHandler, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null // MVID: AD42C4E0-3875-4A66-8CC3-3C98BCE8CEDF // Assembly location: Z:\home\focht.wine\drive_c\Program Files (x86)\Exact Audio Copy\PluginHandler.dll
using HelperFunctionsLib; using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.InteropServices;
namespace MetadataPlugIn { [Guid("C55D92B1-4FDF-4b54-B817-98AB9569F4F4")] [ClassInterface(ClassInterfaceType.None)] [ComSourceInterfaces(typeof (IMetadataRetriever))] public class PluginHandler : IMetadataRetriever, IPluginSelector, IAudioDataTransfer { private IMetadataRetriever[] m_plugins; private IAudioDataTransfer[] m_transfer; private int m_current_plugin; private List<string> m_excluded_guids;
public PluginHandler() { this.m_plugins = new IMetadataRetriever[0]; this.m_transfer = new IAudioDataTransfer[0]; this.m_current_plugin = -1; this.m_excluded_guids = new List<string>(); base.\u002Ector(); List<IMetadataRetriever> metadataRetrieverList = new List<IMetadataRetriever>(); List<IAudioDataTransfer> audioDataTransferList = new List<IAudioDataTransfer>(); string directoryName = Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName); foreach (FileInfo file in new DirectoryInfo(directoryName).GetFiles()) { if (Path.GetExtension(file.Name) == ".dll") { try { Assembly assembly = Assembly.LoadFile(Path.Combine(directoryName, file.Name)); try { IMetadataRetriever instance = (IMetadataRetriever) assembly.CreateInstance("MetadataPlugIn.MetadataRetriever"); if (instance != null) metadataRetrieverList.Add(instance); } catch (Exception ex) { } try { IAudioDataTransfer instance = (IAudioDataTransfer) assembly.CreateInstance("AudioDataPlugIn.AudioDataTransfer"); if (instance != null) audioDataTransferList.Add(instance); } catch (Exception ex) { } } catch (Exception ex) { } } } this.m_plugins = metadataRetrieverList.ToArray(); this.m_transfer = audioDataTransferList.ToArray(); } ... --- snip ---
The 'AcoustID' plugin, implementing 'IAudioDataTransfer' interface:
--- snip --- // Type: AudioDataPlugIn.AudioDataTransfer // Assembly: ChromaPlugin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null // MVID: 32E5E20C-367D-4D05-A362-003AA0FC4CB4 // Assembly location: Z:\home\focht.wine\drive_c\Program Files (x86)\Exact Audio Copy\ChromaPlugin.dll
using ChromaPlugin; using ChromaPrint; using HelperFunctionsLib; using System; using System.Collections.Generic; using System.Collections.Specialized; using System.Diagnostics; using System.Net; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Security.Cryptography; using System.Text; using System.Threading; using System.Xml;
namespace AudioDataPlugIn { [Guid("EFFF6AE3-3D3B-4f0c-A22E-217C566397B1")] [ClassInterface(ClassInterfaceType.None)] [ComSourceInterfaces(typeof (IAudioDataTransfer))] public class AudioDataTransfer : IAudioDataTransfer { private const string AppAPIKey = "<redacted>"; private const string AppAPIKeyTitle = "<redacted>"; private const string SubmissionURL = "http://api.acoustid.org/v2/submit"; private const int FingerprintLength = 120; private const int SampleRate = 44100; private const int NumChannels = 2; private const int BitsPerSample = 16; private const int BytesPerSecond = 176400; private int m_expected_data_length_in_bytes; private int m_start_pos; private uint m_current_pos; private bool m_use_cd; private IMetadataLookup m_data; private AudioDataTransfer.ChromaTrack[] m_tracks; private Dictionary<int, string> m_recordings; private string m_discid;
public string GetAudioTransferPluginGuid() { Attribute customAttribute = Attribute.GetCustomAttribute((MemberInfo) typeof (AudioDataTransfer), typeof (GuidAttribute)); if (customAttribute is GuidAttribute) return ((GuidAttribute) customAttribute).Value; return this.GetAudioTransferPluginName(); } ... --- snip ---
Nothing obvious with the metadata. Maybe Vincent (Wine-Mono maintainer) has some idea where to look further.
Regards