[완료] 라이브러리가 main 쪽의 함수를 사용할 수 있나요?

nekoko의 이미지

질문이 좀 그런데..

지금 프로젝트의 구성이 이렇습니다:

int main(int argc, char *argv[])
{
    startMainApplication();
 
    QApplication a(argc, argv);
    uimain Uimainwindow;
    Uimainwindow.show();
 
    return a.exec();
}

보시다시피 QT를 사용하는 main함수는 cpp프로젝트로 되어있고요,
startMainApplication() 함수는 c프로젝트로부터 컴파일된 공유라이브러리에서
호출합니다.
현재 main(cpp프로젝트)에서 라이브러리쪽(c프로젝트)의 함수는 호출이 잘 됩니다만
c프로젝트에서 main쪽 함수들을 사용하고 싶은데 안되네요. 당연한 건지..
c프로젝트 쪽에서 QT함수들을 사용하고 싶어서 그런데요.. qt는 cpp인데.. c프로젝트 내에서
QT함수를 바로 사용할 순 없을텐데..
뭔가 헷갈립니다. 질문 내용을 이해하셨다면 조언을 부탁드리겠습니다.

lmk378의 이미지

잘 이해는 안되지만 cpp가 main이고 라이브러리가 c인이라면
c에서 cpp 함수를 호출하고 싶으시단 말인가요? 이게 맞다면 안되는게 정상이지 않을까요?

nekoko의 이미지

그렇죠..?;; 당연한 질문을 했나보네요...ㅜ

"I'm convinced that the only thing that kept me going was that I loved what I did." - Steve Jobs 1955-2011

neogeo의 이미지

cpp 쪽에서 extern "C" { } 를 이용해서 export 한 함수는 C 쪽에서 사용이 가능합니다. ( name mangling & calling convention 을 맞춘다는 이야기. )

Neogeo - Future is Now.

nekoko의 이미지

잘 됩니다! 으아~~~
일단 호출은 확인했는데 원하는게 되는진 더 확인해봐야겠습니다.
감사합니다!

"I'm convinced that the only thing that kept me going was that I loved what I did." - Steve Jobs 1955-2011

windowsprogrammer의 이미지

호출 규약만 맞춰주면 언어에 상관없이 함수 호출은 할 수 있습니다.

하지만 라이브러리는 철저히 수동적이고 일반적이어야 합니다.
라이브러리에서 응용 프로그램의 코드를 호출해야 한다면 프로그램 설계가 잘못되진 않았는지 다시 생각해봐야합니다.

nekoko의 이미지

기존 프로젝트에 추가로 넣다보니..ㅋ
참고하겠습니다.

"I'm convinced that the only thing that kept me going was that I loved what I did." - Steve Jobs 1955-2011

익명 사용자의 이미지

main쪽 함수를 사용한다는게
함수포인터를 함수인자로 받는걸 말하는 것이겠죠? ^^

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.