C#PB 호출 dll 상세 정보 생성
테스트 오류 프로세스:
[DllImport("yhinterface.dll", EntryPoint = "f_sblwsk", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = false, CallingConvention = CallingConvention.StdCall)]
public static extern void f_sblwsk(string hospitalComb, ref object ret);
더 자세한 c# 외부 dll 호출
상기 방법을 사용하여 발생한 오류 보고
COClass_n_yhinterface b = new COClass_n_yhinterface();
```csharp
private object Invoke(string lpFileName, string Namespace, string ClassName, string lpProcName, object[] ObjArray_Parameter)
{
try
{ //
Assembly MyAssembly = Assembly.LoadFrom(lpFileName);
Type[] type = MyAssembly.GetTypes();
foreach (Type t in type)
{//
if (t.Namespace == Namespace && t.Name == ClassName)
{//
MethodInfo m = t.GetMethod(lpProcName);
if (m != null)
{
object o = Activator.CreateInstance(t);
return m.Invoke(o, ObjArray_Parameter);
}
else Console.WriteLine(" !");
}
}
}
catch (System.NullReferenceException e)
{
Console.WriteLine(e.Message);
}//catch
return (object)0;
}
위의 메서드는 "...메모리 손상"을 보고합니다.
m_Com_Document.InvokeMember("f_sblwsk", BindingFlags.InvokeMethod, null, objDoc, new object[] { hospitalComb, RetStr });
이런 식으로 함수 방법이 참조 ref 또는 out 유형일 때 파라미터 값은 변화 해결 방안이 발생하지 않는다.
object[] args = new object[2];
string RetStr = "123";
args[0] = hospitalComb;
args[1] = RetStr;
ParameterModifier pMod = new ParameterModifier(2);
pMod[1] = true;
ParameterModifier[] mods = { pMod };
Type m_Com_Document = Type.GetTypeFromProgID("PB90.n_yhinterface");
object objDoc = Activator.CreateInstance(m_Com_Document);
object tempObj = m_Com_Document.InvokeMember("f_sblwsk", BindingFlags.InvokeMethod, null, objDoc, args,mods,null,null);
Console.WriteLine("args[1]:" + Convert.ToString(args[1]));
Console.WriteLine("RetStr:" + Convert.ToString(RetStr));
Console.WriteLine("tempObj:" + Convert.ToString(tempObj));
RetStr = Convert.ToString(args[1]);
string[] datas = RetStr.Split('|');
Console.WriteLine("datas[0]:" + datas[0]);
참조: 배열을 사용하여 ParameterModifier 이상을 사용하여 해결
추가적으로 강화해야 할 사항:
반사값 유형과 인용 유형, 값의 변화wcf와 wpf의 이해이상의 이해는 때때로 이미 답을 찾았고 인지적 결함으로 인해 정답pass를 떨어뜨렸고 헛수고도 많이 했다. 인터넷의 자료를 볼 때 다른 사람의 해결 방안을 만나면 인내심을 가지고 검증해야 한다. 주마관화하지 마라
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C#Task를 사용하여 비동기식 작업을 수행하는 방법라인이 완성된 후에 이 라인을 다시 시작할 수 없습니다.반대로 조인(Join)만 결합할 수 있습니다 (프로세스가 현재 라인을 막습니다). 임무는 조합할 수 있는 것이다. 연장을 사용하여 그것들을 한데 연결시키는 것이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.