여기서 오버로드되는 메서드에 많은 문제가 발생하며 전달하는 매개 변수의 수에 관계없이 매번 한 메서드 만 호출되는 이유를 알 수 없습니다. 아래는 샘플 코드입니다.Excel에서 오버로드하는 방법 COM Interop
[ClassInterface(ClassInterfaceType.AutoDual), ComVisible(true)]
public class myClass
{
//constructor
public myClass() {}
//base method
public string myfunction(string id, string pk) {return results;}
//overloading method 1
public string myfunction(string id, string pk, string param1) { return results;}
//overloading method 2
public string myfunction(string id, string pk, string param1, string param2) {return results;}
[ComRegisterFunctionAttribute]
public static void RegisterFunction(Type type)
{
Registry.ClassesRoot.CreateSubKey(
GetSubKeyName(type, "Programmable"));
RegistryKey key = Registry.ClassesRoot.OpenSubKey(
GetSubKeyName(type, "InprocServer32"), true);
key.SetValue("",
System.Environment.SystemDirectory + @"\mscoree.dll",
RegistryValueKind.String);
}
[ComUnregisterFunctionAttribute]
public static void UnregisterFunction(Type type)
{
Registry.ClassesRoot.DeleteSubKey(
GetSubKeyName(type, "Programmable"), false);
}
private static string GetSubKeyName(Type type,
string subKeyName)
{
System.Text.StringBuilder s =
new System.Text.StringBuilder();
s.Append(@"CLSID\{");
s.Append(type.GUID.ToString().ToUpper());
s.Append(@"}\");
s.Append(subKeyName);
return s.ToString();
}
}
Excel에서 테스트했을 때 기본 방법이 정상적으로 작동하여 예상 값을 얻을 수있었습니다. 그러나 메서드 오버로딩을 사용하여 나머지 두 함수를 시도하면 오류가 발생합니다. 그들은 단순히 어떤 이유로 전화를받지 않았습니다. 코드에서 뭔가 빠졌습니까? 누구든지 제발 도와 주실 래요? 매우 감사합니다.
는편집 : 몇 가지 실험을 통해
, 단지 1 방법은 일반적으로 첫 번째 방법 인이 인식 할 수 있다는 것을 나에게 발생합니다. 따라서 기본 메서드와 오버로드 메서드 1 사이에서 순서를 바꿀 경우 오버로드 메서드 1이 기본 메서드 대신 호출됩니다. 전체 클래스가 첫 번째 메소드에서 멈추고 계속 진행되지 않는 것처럼 보입니다.
wheres가 발신자 코드입니까? – Zenwalker
나는이 = myfunction (1,20)' – woodykiddy
을 사용하거나 선택적 매개 변수를 추가하는 것으로 Excel에서한다. 단지 '= myfunction (1,20, myparamvalue)'을 수행한다. – woodykiddy