mirror of
https://github.com/greenshot/greenshot
synced 2025-08-14 02:37:03 -07:00
Moving back to trunk!
git-svn-id: http://svn.code.sf.net/p/greenshot/code/trunk@1602 7dccd23d-a4a3-4e1f-8c07-b4c1b4018ab4
This commit is contained in:
parent
ad265b2c54
commit
8d458998a1
332 changed files with 17647 additions and 9466 deletions
|
@ -19,12 +19,11 @@
|
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Runtime.Remoting.Proxies;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Runtime.Remoting.Messaging;
|
||||
using System.Runtime.Remoting;
|
||||
using System.Reflection;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Runtime.Remoting;
|
||||
using System.Runtime.Remoting.Messaging;
|
||||
using System.Runtime.Remoting.Proxies;
|
||||
|
||||
namespace Greenshot.Interop {
|
||||
/// <summary>
|
||||
|
@ -53,9 +52,49 @@ namespace Greenshot.Interop {
|
|||
#endregion
|
||||
|
||||
#region Construction
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Gets a COM object and returns the transparent proxy
|
||||
/// Gets a COM object and returns the transparent proxy which intercepts all calls to the object
|
||||
/// </summary>
|
||||
/// <param name="type">Interface which defines the method and properties to intercept</param>
|
||||
/// <returns>Transparent proxy to the real proxy for the object</returns>
|
||||
/// <remarks>The <paramref name="type"/> must be an interface decorated with the <see cref="ComProgIdAttribute"/>attribute.</remarks>
|
||||
public static object GetInstance(Type type) {
|
||||
if (null == type) {
|
||||
throw new ArgumentNullException("type");
|
||||
}
|
||||
if (!type.IsInterface) {
|
||||
throw new ArgumentException("The specified type must be an interface.", "type");
|
||||
}
|
||||
|
||||
ComProgIdAttribute progID = ComProgIdAttribute.GetAttribute(type);
|
||||
if (null == progID || null == progID.Value || 0 == progID.Value.Length) {
|
||||
throw new ArgumentException("The specified type must define a ComProgId attribute.", "type");
|
||||
}
|
||||
|
||||
object comObject = null;
|
||||
Type comType = Type.GetTypeFromProgID(progID.Value, true);
|
||||
try {
|
||||
comObject = Marshal.GetActiveObject(progID.Value);
|
||||
} catch (COMException comE) {
|
||||
if (comE.ErrorCode == MK_E_UNAVAILABLE) {
|
||||
LOG.DebugFormat("No current instance of {0} object available.", progID.Value);
|
||||
} else {
|
||||
LOG.Warn("Error getting active object for " + progID.Value, comE);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
LOG.Warn("Error getting active object for " + progID.Value, e);
|
||||
}
|
||||
|
||||
if (comObject != null) {
|
||||
COMWrapper wrapper = new COMWrapper(comObject, type);
|
||||
return wrapper.GetTransparentProxy();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or creates a COM object and returns the transparent proxy
|
||||
/// which intercepts all calls to the object
|
||||
/// </summary>
|
||||
/// <param name="type">Interface which defines the method and properties to intercept</param>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue